2012-03-16 73 views
0

編輯這個問題是Setting "checked" for a checkbox with jQuery?愚弄的人,因爲這個問題在這裏明確要求有關地方的特殊情況:「一旦一個複選框用戶點擊該複選框停止響應「已檢查」屬性更改。「JQuery的:切換一個複選框,用戶只需切換

有一個答案(一個相比於其他幾個upvotes)談到有關這一點,但在回答所有的鏈接全然傾倒......

我試圖做一些事情「出於好奇」。我試圖做的沒有意義。

我成功地使用JQuery來顯示覆選框是否被選中或取消選中使用警報。以下工作正常:

$(document).ready(function() { 
    $('.cb').change(function(){ 
    if ($('.cb').is(':checked')) { 
     alert('changed to checked'); 
    } else { 
     alert('changed to unchecked'); 
    } 
    }); 
}); 

但我無法弄清楚如何將複選框回頭到其初始狀態(再次聲明:有一個在這樣做沒有意義的,但我想這樣做)。

是否有可能做到這一點,是否有可能將複選框切換回原來的狀態沒有觸發更改事件?

我試過attr and removeAttr無濟於事。

+1

看到http://stackoverflow.com/questions/426258/how-do-i-check-a-checkbox-with-jquery-or-javascript – j08691 2012-03-16 21:08:52

+0

@ j08691:我試過這個無濟於事......我'當試圖改變複選框從一個回調調用,當一個點擊精確地在該複選框,可以這樣做?沒有「無限事件」的問題嗎?如果發生變化,觸發該呼叫,我切換回該值,重新觸發呼叫。 – 2012-03-16 21:10:46

+0

我認爲改變事件是不可避免的。如果你想避免執行一些在更改時發生的代碼,你將不得不放入一個catch。 – Fresheyeball 2012-03-16 21:15:05

回答

1

檢查我的小提琴:

http://jsfiddle.net/QvaEA/

$(document).ready(function() { 
    $('.cb').change(function(){ 
    if ($(this).is(':checked')) { 
     alert('changed to checked -> uncheck again'); 
     $(this).attr('checked', false); 
    } else { 
     alert('changed to unchecked -> recheck'); 
     $(this).attr('checked', true); 
    } 
    }); 
});​ 

在callbackfunctions你應該總是使用$(this)訪問觸發元件。在你的代碼中,你總是會檢查(並改變)所有複選框與類cb。

+0

+1,偉大的jsfiddle在那裏......但是有一件事情讓我完全困惑:當你改變價值時,一個新的*更改(...)*未被觸發?它是否會保證從未在未來的JQuery版本中觸發? – 2012-03-16 21:25:42

+0

更改事件僅在用戶交互時觸發。我不知道這是一個js /瀏覽器限制還是作爲jQuery中的設計要求完成的。你可以確定它沒有在任何瀏覽器中觸發。至少這是我從jQuery文檔中讀取的內容。 – StilgarBF 2012-03-16 21:36:21

+0

非常感謝您的幫助,我得到了一切工作:) – 2012-03-16 23:34:01

1
在改變事件

補充:

$(本).prop( '檢查',this.checked!);