2014-01-14 59 views
0

我有沒有被正確拿起復選框(如果選中)的功能 使用此項功能:

function playerJson() { 
    players = []; 
    $('input[name=playerCheckList]').each(function() { 
     if ($(this).checked) { 
      players.push($(this).val()); 
     } 
    }); 

    return $.toJSON(players); 
} 

我用這個功能來檢查所有按鈕(正確)

$(function() { 
    $("#checkAllPlayers").click(function() { 
     $('input[name=playerCheckList]').each(function() { 
      $(this).prop('checked', true); 
     }); 
    }); 
}); 

如果我沒有if語句:

如果($(本).checked)

從第一段代碼,它正確地拿起所有的值(檢查與否)

所以,這個聲明可能是問題,但我不知道爲什麼。

感謝

回答

2

至於其他的答案說,.checked不會jQuery對象上工作。

這種情況很容易顯現這樣:未定義/錯誤,因爲它是一個jQuery對象,而不是元素

$(this).checked回報。
$(this)[0].checked返回值checked,因爲您引用的是元素本身,而不是引用該元素的jQuery對象。

下面是你的腳本的一個修改和固定版本,完全消除了jQuery的使用,因爲它們是無意義地使用jQuery,因此完全用於checkedvalue。另一種使用更有意義,因此它仍將保留在我的答案中。

function playerJson() { 
     players = []; 
     $('input[name=playerCheckList]').each(function() { 
      if (this.checked) { 
       players.push(this.value); 
      } 
     }); 
     return $.toJSON(players); 
    } 
+2

_「$(this0 [0] .checked返回檢查的值」_,不會拋出錯誤(_not downvoter_。) – undefined

+1

非常翔實的I欣賞它 –

7

這指的是一個jQuery對象,它沒有產權「檢查」(DOM的將有一個屬性雖然)。您需要獲取屬性值。

$(this).prop("checked"); 

編輯:我支持qwertynl's answer因爲vanilla.js

+6

或'$(本)。是( ':勾選')' – androidavid

+1

剛一說明:'是()'是比'道具()'('ATTR()'是最慢的)稍慢並且都比香草慢。當然,「is()」會起作用。 –

5

$(this).checked不起作用,因爲$(this)是一個jQuery oject。

試想一下,在DOM對象(this)的checked屬性:

... 
if (this.checked) { 
    players.push(this.value); 
} 
... 
+1

-1沒有足夠的jQuery。 – undefined

+0

-1沒有使用插件 –

+0

@BlackSheep我沒有使用jQuery :-P – qwertynl

相關問題