如何确定Javascript和Jquery函数的执行顺序

如何确定Javascript和Jquery函数的执行顺序,javascript,jquery,html,jquery-selectors,dom-events,Javascript,Jquery,Html,Jquery Selectors,Dom Events,单击Cancel按钮,我调用了两个函数一个Java脚本和一个Jquery函数。 java脚本函数在Jquery函数之前执行,我想要的正好相反。 这是我的HTML代码 <button type="button" class="noWarning" id="cancelButton" onclick="javascript: showMessage('cancelButton', 'Cancelling...'); disableButtons(); submitForm('${ca

单击
Cancel
按钮,我调用了两个函数一个Java脚本和一个Jquery函数。
java脚本函数在Jquery函数之前执行,我想要的正好相反。
这是我的HTML代码

<button type="button" class="noWarning" id="cancelButton" 
    onclick="javascript: showMessage('cancelButton', 'Cancelling...'); disableButtons(); submitForm('${cancelDataRequestFormUrl}');">
    Cancel</button>  
showMessage('cancelButton','Cancelling…')
$(“.noWarning”)之前执行。单击(function())
如何更改执行顺序?
编辑:
我用另一个按钮试了一下

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

另存为草稿
并且它的工作良好
Jquery
函数在
onClick
函数之前被调用。

这让人更加困惑

为什么不把showMessage函数放到jQuery函数中呢

$(".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}');
}); 

正如您所见,定义回调的顺序很重要。

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

防止这种情况发生的唯一方法是使用jQuery在源代码或客户端中删除该属性,如图所示

然后,可以按照希望执行的顺序使用jQuery绑定回调:

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

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

请注意,
onclick
属性的使用被认为是90年代的一种不良做法,应该避免使用。JavaScript应该与HTML分开,如果可能,最好放在一个单独的文件中。

执行顺序由您将函数绑定到单击事件的顺序决定。 但是为了将函数绑定到按钮的onclick事件,必须已经定义了按钮

在您的示例中,您定义了按钮并直接将showMessage函数绑定到它,方法是说onclick=。。。等 很可能,在代码中绑定了第二个函数

为了更好地控制它,可以用相同的方式绑定onclick函数,或者在onclick属性中定义它,或者稍后使用javascript进行绑定

范例

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

@马库斯:问题是我正在编写一个通用脚本,它应该在任何地方运行,我不应该(不能)更改原始代码。还有其他选择吗?@Ajinkya,遗憾的是没有。
onclick
-属性中的代码将在创建DOM元素后立即绑定到事件,因此将首先执行。但是,您可以使用
.removeAttr(“onclick”)
@Marcus Ekwall操作代码客户端并删除属性,我认为
.onclick=null
也可以吗?(虽然不确定!)@Domenic,这和我更新的答案中看到的一样好,所以它实际上回答了你的问题;)谢谢你的建议,帮助很大:)
<button id="button1" onclick="function1();function2();">click me</button>
$("#button1").click(function2);  
$("#button1").click(function1);