我正在尝试在Dajaxice / Dajax处理时阻止使用按钮。我需要保证,如果在Dajax完成之前需要很长时间才能进行第二次Dajaxice onclick调用。
我检查过Dajax / Dajaxice readthedocs,stackoverflow,谷歌找不到解决方案。所以我开始黑客攻击......
我开始在基本按钮中使用Dajaxice可能是这样的:
<button id="btn" onclick="Dajaxice.example.myexample(Dajax.process);">
Click here!
</button>
但我希望在Dajax处理时删除onclick属性值。我首先尝试删除回调函数中的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>
问题是在onclick属性值清除之前调用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.process”用法,以允许在这个修订的jQuery / Dajaxice代码中运行post-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>
答案 0 :(得分:2)
我相信这样做应该足够了:
保留您的HTML:
<button id="btn">
Click here!
</button>
使用jQuery执行此操作:
$('#btn').click(function(){
$('#btn').attr("disabled", "disabled");
if($('#btn').attr("disabled")) {
Dajaxice.example.myexample(Dajax.process);
}
});
一个简单的jsfiddle演示了这个http://jsfiddle.net/37VTL/1/
它禁用按钮,然后检查按钮是否真的被禁用,如果是,则执行该功能。尽管在禁用按钮后检查按钮是否被禁用似乎是多余的,但这只是确保您的功能以您希望的方式运行的一种方式。