2010-06-24 103 views
6
$(document).ready(function() { 
    $("#FieldsetID").each(function() { 
       $('.Isubmit').attr('disabled', 'disabled'); 
      }); 
}); 

該按鈕顯示爲禁用,但當我點擊它的doign動作?禁用按鈕在點擊上工作

是我做錯了什麼?

謝謝

+0

你在代碼綁定到該按鈕,其他地方的一些事件? – Mark 2010-06-24 17:50:24

回答

2

由於某些原因,當您單擊禁用的提交按鈕時,IE不會阻止該事件冒泡。

我假設你有一些其他的事件處理程序,因此被觸發的祖先。

在那個祖先的事件處理程序中,它看起來像您需要測試以查看是否單擊了該按鈕並且該按鈕是否被禁用。如果是這樣,你會return false;阻止代碼運行,或發生提交,或任何其他。

 // Not sure if this is the right event, but you get the idea 
$(someSelector).click(function(event) { 
    var $target = $(event.target); 
        // check to see if the submit was clicked 
        // and if it is disabled, and if so, 
        // return false 
    if($target.is(':submit:disabled')) { 
     return false; 
    } 
}); 
4

我不認爲你可以在一個獨特的元素上運行.each()函數。它是獨一無二的,因爲您使用的是#id選擇器。

你只需要做到這一點:

$(document).ready(function() { 
    $('#FieldsetID .Isubmit').attr('disabled', 'disabled'); 
}); 

現在的按鈕不應該點擊。

+2

他說按鈕已經顯示爲禁用,所以我不認爲這是問題所在。另外,儘管你不應該在id選擇器上運行每個選項,但是沒有人說你不能,所以儘管效率很低,他的代碼仍然可以工作。 – Mark 2010-06-24 17:59:23

+0

@Mark - +1什麼都沒有(除了最佳實踐)防止一個人循環播放一個項目的數組。 – user113716 2010-06-24 18:02:46

1

Altough未經測試,我認爲當你通過id選擇元素時,你不需要使用每個元素,因爲它返回一個元素,而當你選擇使用類時你必須使用每個元素,嘗試使用每個禁用選擇器看看。

0

好一個最簡單的方法就是找如果點擊按鈕已禁用類,如果它有返回false,例如:

$('.button1').click(function() { 
if ($(this).hasClass('disabled')) { 
    return false; 
} else { 
    //do whatever you want when element is clicked 
} 

});