2011-06-07 79 views
2

我正在调用两个函数一个Java脚本和一个Jquery函数,点击Cancel按钮。
Java脚本函数在Jquery函数之前得到执行,我想完全相反。
这里是我的HTML代码如何决定执行顺序为Javascript和Jquery函数

<button type="button" class="noWarning" id="cancelButton" 
    onclick="javascript: showMessage('cancelButton', 'Cancelling...'); disableButtons(); submitForm('${cancelDataRequestFormUrl}');"> 
    Cancel</button> 

jQuery函数

$(".noWarning").click(function() 
    { 
     needToConfirm = false; 
     alert("NeedToConfirm : " + needToConfirm); 
    }); 

showMessage('cancelButton', 'Cancelling...');得到$(".noWarning").click(function())之前,我怎么能更改执行顺序执行?
编辑:
我试图用相同的另一个按钮

<button type="button" class="noWarning" id="saveButton" 
    onclick="javascript: submitDataRequest('saveButton', 'Saving...', 'newDataRequestForm', '${saveDataRequestFormUrl}', '${successSaveDataRequestFormUrl}');"> 
    Save as Draft</button>  

而之前onClick功能及其工作正常Jquery函数获取调用。
这会增加混淆。

〜Ajinkya。

回答

3

在JavaScript中,回调和事件处理程序应该按照它们绑定的顺序执行,并且无法更改该顺序。 onclick属性中的代码将在创建元素后直接绑定,因此将首先被执行。

防止这种情况的唯一方法是通过使用jQuery的.removeAttr来删除源或客户端的属性,如test case所示。

然后,您可以绑定使用jQuery回调的顺序,你希望他们执行:

$(".noWarning").click(function(){ 
    needToConfirm = false; 
    alert("NeedToConfirm : " + needToConfirm); 
}); 

$("#cancelButton").click(function(){ 
    showMessage('cancelButton', 'Cancelling...'); 
    disableButtons(); 
    submitForm('${cancelDataRequestFormUrl}'); 
}); 

请注意:onclick属性的使用被认为是属于早在上世纪90年代一个不好的做法和应该避免。如果可能的话,JavaScript应该从HTML中分离出来,最好放在一个单独的文件中。

+0

@Marcus:问题是,我写一个通用的脚本应该到处运行,我不应该(不能)更改原始代码。有没有其他的选择? – xyz 2011-06-07 07:13:27

+0

@Ajinkya,可悲的是。只要DOM元素创建完成,“onclick”属性中的代码就会绑定到事件上,因此将首先执行。但是,您可以操作代码客户端并使用'.removeAttr(“onclick”)'删除该属性。 – mekwall 2011-06-07 07:19:51

+0

@Marcus Ekwall,我觉得'.onclick = null'也会起作用吗? (不知道虽然!) – Domenic 2011-06-07 07:23:10

0

为什么不把showMessage函数放入jQuery函数中?

3
$(".noWarning").click(function() 
{ 
    needToConfirm = false; 
    alert("NeedToConfirm : " + needToConfirm); 
    showMessage('cancelButton', 'Cancelling...'); 
    disableButtons(); 
    submitForm('${cancelDataRequestFormUrl}'); 
}); 

请记住,jQuery是一个基于javascript的库。所以你可以在jQuery回调中使用JS。

如果你想.noWarning是一个单独的回调(结合几个元素)和#cancelButton有一个独特的回调,你可以这样做:

$(".noWarning").click(function() 
{ 
    needToConfirm = false; 
    alert("NeedToConfirm : " + needToConfirm); 
}); 

$("#cancelButton").click(function() 
{ 
    showMessage('cancelButton', 'Cancelling...'); 
    disableButtons(); 
    submitForm('${cancelDataRequestFormUrl}'); 
}); 

正如你所看到的,你的订单定义你的回调事宜。

+0

感谢您的建议,它帮助了很多:) – xyz 2011-06-07 09:41:59

1

执行顺序取决于您将函数绑定到点击事件的顺序。 但为了将一个函数绑定到按钮的onclick事件上,该按钮必须已经被定义。

在您的示例中,您正在定义按钮并直接将showMessage函数绑定到它,通过说onclick = ...等。012b可能在代码中更多的下来你绑定第二个函数。

要获得对它的更多控制权,请将onclick函数全部以相同的方式绑定,或者通过在onclick属性中定义它,或者稍后使用javascript来完成。

<button id="button1" onclick="function1();function2();">click me</button> 

或者通过做这样

$("#button1").click(function2); 
$("#button1").click(function1);