簡體   English   中英

內聯onclick覆蓋JQuery click()

[英]Inline onclick is overriding JQuery click()

這個問題的后續

編輯

JSFiddle代碼

如您所見,如果您運行代碼,按鈕文本不會更改,則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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM