0

我试图阻止在 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>
4

1 回答 1

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/

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

于 2013-12-17T01:17:06.797 回答