Javascript 内联onclick正在重写JQuery click()
来自 编辑 正如您所看到的,如果运行代码,按钮文本不会改变,onclick将覆盖click函数。如果从函数中删除form id属性,从html标记中删除onclick属性,则代码将按预期工作(在实际场景中,onclick函数不表示提交按钮,而表示按钮) 结束编辑 我曾经认为,当指定内联事件时,JQuery没有触发click()事件是由输入错误造成的,但是我再次遇到了这个问题。这是我的代码和违规标签Javascript 内联onclick正在重写JQuery click(),javascript,jquery,onclick,click,Javascript,Jquery,Onclick,Click,来自 编辑 正如您所看到的,如果运行代码,按钮文本不会改变,onclick将覆盖click函数。如果从函数中删除form id属性,从html标记中删除onclick属性,则代码将按预期工作(在实际场景中,onclick函数不表示提交按钮,而表示按钮) 结束编辑 我曾经认为,当指定内联事件时,JQuery没有触发click()事件是由输入错误造成的,但是我再次遇到了这个问题。这是我的代码和违规标签 <input id="submit1" type="button" onclick="th
<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();
});
}
}
};
myfunction('submit1','working',myformID)
var myfunction=函数(ID、text、formID){
如果(ID){
var元素=document.getElementById(ID);
if(formID){
var form=document.getElementById(formID);
}
if(元素){
jQuery(元素)。单击(函数(){
if(jQuery(this.attr('disabled')){
返回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创建一个函数,该函数将禁用submit按钮,同时在doSubmit情况下保持任何onclick属性工作,如本例所示。在其他情况下,如果设置了表单id,并且没有现有的onclick,我将提交表单。因此,如果html标记有问题,我需要一种用JS修复它的通用方法
非常感谢您的内联处理程序禁用按钮:
this.disabled=true代码>
然后jQuery处理程序检查它是否被禁用,如果是,则返回:
if(jQuery(this).attr('disabled')) {
return false;
}
不幸的是,对于同一元素上的同一事件,有太多的事件处理程序执行
作为一个快速解决方案,我可以提出以下建议:
内联处理程序禁用按钮:this.disabled=true代码>
然后jQuery处理程序检查它是否被禁用,如果是,则返回:
if(jQuery(this).attr('disabled')) {
return false;
}
不幸的是,对于同一元素上的同一事件,有太多的事件处理程序执行
作为一个快速解决方案,我可以提出以下建议:
也许您可以为您的问题提供一个JSFIDLE版本?您认为单击处理程序是无限递归的…您确定吗?第二次调用它时,由于单击函数中的第一个if(),它应该返回false。也许您可以提供问题的JSFIDLE版本?您的单击处理程序是无限递归的……您确定吗?第二次调用它时,由于单击函数中的第一个if(),它应该返回false不幸的是,您的演示似乎在加载时工作过一次,然后又无法工作,但是,我已经以类似的方式重建了函数,根本问题是事件处理程序并不像我所想的那样从标记外部开始顺序调用,所以我接受这个答案。非常感谢您的时间,不幸的是,您的演示似乎在加载时工作过一次,然后就不再工作了,但是我已经以类似的方式重新构建了函数,根本问题是事件处理程序没有像我所想的那样从标记外开始按顺序调用,所以我接受这个答案。非常感谢您抽出时间