我试图阻止在 Dajaxice/Dajax 处理时使用按钮。如果在 Dajax 完成之前需要很长时间,我需要保证不会进行第二次 Dajaxice onclick 调用。
我检查了 Dajax/Dajaxice readthedocs、stackoverflow 和 google 找不到解决方案。所以我开始黑客攻击......
我开始在一个基本按钮中使用 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>
问题是 Dajaxice 函数myexample在 onclick 属性值被清除之前被调用(因为它需要被调用,否则它们不会被调用)。我想在执行 Dajaxice 函数之前清除 onclick。
在我最近的尝试中,我将 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 代码中运行后 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>