我试图在Dajaxice/Dajax正在处理时阻止使用按钮。我需要保证,如果在Dajax完成之前需要很长时间才能完成第二次Dajaxice onclick调用。如何在调用Dajaxice之前运行jQuery来禁用onclick?目前的解决方案很难看
我检查了Dajax/Dajaxice readthedocs,stackoverflow和google找不到解决方案。于是我开始黑客....
我开始在一个基本的按钮使用Dajaxice可能是这样的:
<button id="btn" onclick="Dajaxice.example.myexample(Dajax.process);">
Click here!
</button>
但我想删除onclick属性值,而Dajax正在处理中。我第一次尝试删除的onclick的回调函数,但为时已晚,在这一点上,因为回调不会被调用,直到Dajaxice调用后:
<button id="btn" onclick="Dajaxice.example.myexample(my_js1_callback);">
Click here!
</button>
<script>
function my_js1_callback(data){
$("#wkbtn").attr('onclick', ""); /* Too Late */
Dajax.process(data);
}
</script>
的问题是,Dajaxice功能myexample中在onclick属性值清除之前调用(因为它需要或者它们不会调用)。我想在执行Dajaxice函数之前清除之前的。
在我的最新尝试,我搬到了Dajaxice调用到了jQuery,而不是在onclick:
<button id="btn" onclick="my_dajaxice_myexample();">
Click here!
</button>
<script>
function my_js1_callback(data){
Dajax.process(data); /* process callback */
}
function my_dajaxice_myexample(){
$("#wkbtn").attr('onclick', ""); /* runs before Dajaxice */
$(function(){Dajaxice.example.myexample(my_js1_callback);})
}
</script>
它的工作原理,但似乎丑陋。看起来似乎有一个比这种腰带和吊带矫枉过正的方法更好的东西。
有什么建议吗?
编辑:基于VASH的答案更新:
<button id="btn">
Click here!
</button>
与jQuery/Dajaxice代码:
<script>
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
/* other pre-Dajaxice changes here */
Dajaxice.example.myexample(Dajax.process);
});
</script>
扩展此一点,我喜欢有取代“Dajax的可能性。过程“的用法与函数调用,以允许在此修订的jQuery/Dajaxice代码中运行Dajaxice调用JavaScript代码:
<script>
function my_callback(data){
/* post-Dajaxice call, pre-Dajax execution changes here */
Dajax.process(data); /* process callback */
/* post-Dajax execution changes here */
}
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
/* other pre-Dajaxice changes here */
Dajaxice.example.myexample(my_callback);
});
</script>
不幸的是,执行顺序很重要。在FF中运行你的例子并打破这两个文件。getElementBy和attr禁用行,getElement总是首先执行,这似乎表明Dajaxice会在按钮被禁用之前执行。看来我可以移动getElement _into_ btn click函数,所以它必须在禁用btn后执行。 – ChrisFreeman
我的不好,我显然没有阅读你所说的在Dajaxice()函数被调用之前需要清除按钮**的部分。是的,你可以这样做,只是为了确保你的功能在按钮被禁用后运行,你可以检查属性。这是一个更新的jsfiddle:http://jsfiddle.net/37VTL/1/(我会相应地更新我的答案;希望这是你所需要的) –
太好了!通过将两个操作放在同一个函数中强制排序是我所需要的。我想我陷入了试图通过onclick属性中的Dajaxice调用来解决它的陷阱。我对你的回答做出的一个改变是*不*使用额外的if-disabled-check并依赖代码我的推理是,如果这是一个远程机会,代码顺序不起作用,那么检查是不会工作,或者由于if-disable阻止Dajaxice运行,*然后*该按钮变为禁用将导致与锁定一个死锁并没有执行。 – ChrisFreeman