如何在调用Dajaxice之前运行jQuery来禁用onclick?目前的解决方案很难看

时间:2013-12-17 00:51:23

标签: jquery django dajaxice dajax

我正在尝试在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>

1 个答案:

答案 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/

它禁用按钮,然后检查按钮是否真的被禁用,如果是,则执行该功能。尽管在禁用按钮后检查按钮是否被禁用似乎是多余的,但这只是确保您的功能以您希望的方式运行的一种方式。