2014-03-31 51 views
-2

爲什麼不能正確切換?這不能正確切換

$('#violation_form label').click(function() { 
    //alert($(this).parent().prev().html()); 
    var $checkbox = $(this).closest('li').find('input[type="checkbox"]'); 
    console.log(!$checkbox.attr('checked')); 
    $checkbox.attr('checked', !$checkbox.attr('checked')); 
}); 

http://jsfiddle.net/SEkTp/2/

+1

沒有'li'在HTML - 也使用.prop(),而不是.attr() –

+0

見http://jsfiddle.net/arunpjohny/BE9z3/1 –

+1

沒有LI,jQuery沒有定義,'prop'比'attr'更好...真的,爲什麼要急於發佈一個問題呢? – raina77ow

回答

2

你濫用<label>元素。當你可以直接進行點擊時,使用魔術技巧點擊它會影響相應的<input>沒有意義。引用的文檔(MDN):

的HTML <label>表示在用戶界面 一個項目的標題。它可以通過將控制元素放置在標籤元素內或通過使用for 屬性來與控件相關聯。這樣的控制被稱爲標籤 元件的標籤控制的

因此,無論...

<label><input type="checkbox" />Whatever</label> 

...,更復雜,但更靈活:

<input type="checkbox" name="some_checkbox" id="some_checkbox" /> 
<label for="some_checkbox">Whatever it is</label> 

...會工作。

Demo

+0

omg yes dis is so much simplerah! –

+0

沒有意識到你可以在元素周圍包裝標籤,並放棄使用'for',它可靠地工作嗎?我看過的文檔沒有提到這樣做。 – MLeFevre

+1

@MLeFevre爲什麼我認爲這是一個衆所周知的功能。不過,剛剛添加了來自MDN的報價。 ) – raina77ow

1

有一個在DOM沒有li元件。還可以使用prop設置複選框的開啓/關閉。試試這個:

$('#violation_form label').click(function() { 
    $checkbox = $(this).closest('form').find('input[type="checkbox"]'); 
    console.log(!$checkbox.attr('checked')); 
    $checkbox.prop("checked", !$checkbox.prop("checked")); 
}); 

Working Demo

+0

爲什麼使用prop而不是attr? –

+0

@GeorgeNewton:參見http://stackoverflow.com/a/5876747/1719752 –

1

您可以使用.prop(),而不是.attr()來設置複選框的選中狀態:

$checkbox.prop('checked', !$checkbox.prop('checked')); 

最終代碼的樣子:

$('#violation_form label').click(function() { 
    //alert($(this).parent().prev().html()); 
    var $checkbox = $(this).closest('li').find('input[type="checkbox"]'); 
    console.log(!$checkbox.prop('checked')); 
    $checkbox.prop('checked', !$checkbox.prop('checked')); 
}); 

Updated Fiddle

1

也許你想這樣=>http://jsfiddle.net/SEkTp/14/

jQuery('#violation_form label').click(function() { 
    // alert("hi"); 
    //alert($(this).parent().prev().html()); 
    var checkbox = jQuery(this).find('input[type="checkbox"]'); 
    console.log(!checkbox.attr('checked')); 
    checkbox.attr('checked', !checkbox.attr('checked')); 
}); 
1

選中此項,您錯過了該結構中的<li>。現在,它的正常工作

Demo