2013-08-02 78 views
1

我試圖獲取一個複選框來檢查並取消選中它是否未被選中。它正在檢查是否未選中 - 但如果選中,則不會取消選中。很奇怪。提前致謝!使用Jquery檢查和取消選中複選框

這裏是我的代碼:

編輯:這裏的的jsfiddle:http://jsfiddle.net/itamark/UnR4X/

JS:

$(':checkbox').mouseenter(function(){ 
    if($(this).not(':checked')) { 
     alert('notchecked'); 
     $(this).attr('checked', true); 
    } 
    else if($(this).is(':checked')){ 
     alert('ischecked'); 
     $(this).attr('checked', false); 
    } 


}) 

HTML:

<input type="checkbox" name"myCheck" id="chk1"/>Checkbox</label> 
+0

試試這個 - http://stackoverflow.com/questions/426258/how-do-i-check-a-checkbox-with- jquery-or-javascript –

+0

在懸停時執行此操作有點毫無意義,因爲只要您取消懸停/鼠標懸停,複選框將始終*取消選中,無論用戶的行爲如何。這是什麼意思? –

+0

@DavidThomas是的 - 我已經切換到'.mouseenter'。我會更新代碼。 – itamar

回答

4

.is().not()是不一樣的

.is()返回TRUE或FALSE而.not()刪除jQuery的元素,如果它匹配。

因此,$(selector).not()將永遠是真實的,因爲jquery被定義。

要檢查元素是否存在,請使用.length

$(':checkbox').hover(function(){ 
    if($(this).not(':checked').length) { 
     $(this).prop('checked', true); 
    } 
    else if($(this).is(':checked')){ 
     $(this).prop('checked', false); 
    } 
}) 

小提琴:http://jsfiddle.net/UnR4X/3/

你可能藏漢使用1個襯墊:

$(this).prop('checked', !$(this).prop('checked')); 
+0

雖然所有其他人都非常有幫助 - 這一個班輪運作良好。我還了解到,您不必在元素中直觀地具有該屬性,以便抓住它。它是否正確? – itamar

+0

不錯!脆! – Aditya

1

使用.prop()

$(this).prop('checked', true); 
$(this).prop('checked', false); 
+0

這實際上是我嘗試過的第一種方法,它不起作用。只是插上重試,沒有雪茄。抱歉。 – itamar

+0

但你的jsfiddle需要修正一些錯字,然後才能正常工作:http://jsfiddle.net/UnR4X/6/但是不確定你在找什麼。您正在使用懸停輸入/輸出處理程序。檢查DOC,你想也許別的 –

1

我想觸發click事件會改變複選框的選中狀態

$(':checkbox').hover(function() { 
    $(this).trigger('click'); 
}); 
+0

我很興奮,因爲這種工作。它檢查框但不添加屬性。嘗試添加它作爲道具,並再次打破檢查切換。 – itamar

+0

第二個想法 - 它不需要一個可視化的'clicked'屬性,對於所有意圖和目的都被視爲被檢查的權利,對吧? – itamar

+0

這應該是對的 – callmehiphop

1

Working Fiddle

注意你輸入的名稱PARAM需要一個平等的。此外,懸停錯誤的事件,除非你指定懸停和懸停處理程序,否則明智的功能將繼續運作。更容易使用mouseenter處理程序。這種方式只能在開始懸停時觸發。如果你想在鼠標離開時發生其他事情,你可以指定一個鼠標離開。或者,您可以指定2個函數在懸停功能中執行此操作。

$(':checkbox').mouseenter(function(){ 
     if($(this).prop('checked')) { 
      $(this).prop('checked', false); 
     } 
     else{ 
      $(this).prop('checked', true); 
     } 

}) 
+0

是的 - 這給你的複選標記 - 但我沒有看到一個'checked =「選中了」'或者只是一個'checked'屬性。 – itamar

+0

@ItamarOKestenbaum你不需要檢查是否在元素中。看到這個小提琴。 http://jsfiddle.net/UnR4X/12/ jquery仍然會知道它的選中狀態,並且一個http帖子也會發布它。 – Rooster

+0

Phew。這使事情變得更簡單。謝謝! – itamar

1

這裏是工作提琴, http://jsfiddle.net/UnR4X/11/

$(':checkbox').mouseenter(function(){ 
     if($(this).prop('checked')) { 
      $(this).prop('checked', false); 
      $(this).removeAttr('checked'); 
     } 
     else{ 
      $(this).prop('checked', true); 
      $(this).attr('checked',true); 
     } 
相關問題