[英]Inline onclick is overriding JQuery click()
这个问题的后续
编辑
如您所见,如果您运行代码,按钮文本不会更改,则onclick会覆盖click功能。 如果从函数中删除表单id属性,并从html标记中删除onclick属性,则代码将按预期工作(在实际情况下,没有onclick函数表示提交按钮而不是按钮)
结束编辑
我曾以为输入错误是导致JQuery在指定内联事件时不触发click()事件的原因,但是我又遇到了这个问题。 这是我的代码和令人讨厌的标签
<input id="submit1" type="button" onclick="this.disabled=true; doSubmit();" value="submit">
<script>myfunction('submit1', 'working', myformID)</script>
var myfunction = function(ID , text , formID) {
if(ID) {
var element = document.getElementById(ID);
if(formID) {
var form = document.getElementById(formID);
}
if (element) {
jQuery(element).click( function() {
if(jQuery(this).attr('disabled')) {
return false;
}
jQuery(this).attr('disabled' , 'disabled');
jQuery(this).attr('value' , processingText);
onclick = (jQuery(this).attr('onclick') || jQuery(this).attr('onClick'));
if(form && !onclick) {
jQuery(form).submit();
}
jQuery(this).click();
});
}
}
};
我正在使用javascript创建一个函数,该函数将禁用提交按钮,同时在doSubmit情况下保持任何onclick属性正常工作,例如在这种情况下。 在其他情况下,如果设置了表单ID,并且没有现有的onclick,我将提交表单。 因此,如果html标记存在问题,我需要一种使用JS修复它的一般方法。
提前谢谢了
您的内联处理程序将禁用该按钮: this.disabled=true;
然后jQuery处理程序检查它是否被禁用,如果是则返回:
if(jQuery(this).attr('disabled')) {
return false;
}
不幸的是, 无法预测同一元素上同一事件的事件处理程序的执行顺序 。
作为快速解决方案,我可以建议这样做:
jQuery(element).click( function() {
if(jQuery(this).attr('disabled-by-jquery')) {
return false;
}
jQuery(this).attr('disabled' , 'disabled');
jQuery(this).attr('disabled-by-jquery' , 'disabled');
jQuery(this).attr('value' , text);
onclick = (jQuery(this).attr('onclick') || jQuery(this).attr('onClick'));
if(form && !onclick) {
jQuery(form).submit();
}
jQuery(this).click();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.