如何确定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);