2017-01-02 3 views
1

Я очень неопытный программист jQuery не смог найти ошибку в моем тривиальном скрипте. Не могли бы вы помочь?jQuery .data() не возвращает логическое значение; Зачем?

Я хочу подчеркнуть флажок, если его состояние отличается от начального значения. Это начальное значение сохраняется как атрибут data-init. Сгенерированный HTML для проверяемого и неконтролируемого ввода выглядит следующим образом:

<td><input checked data-init id="controls-0-modeU" name="controls-0-modeU" type="checkbox" value="y"></td> 

<td><input id="controls-1-modeU" name="controls-1-modeU" type="checkbox" value="y"></td> 

В принятом ответе здесь: Retrieve boolean data from data attribute in jquery есть: "метод JQuery .data() умен о признании логических и числовых значений и преобразует их в свой собственный тип ". Это то, что я хочу.

Мой сценарий начинается с:

$(document).ready(function(){ 
     $("td input:checkbox").change(function(){ 
      var $init = $(this).data("init") 

Но значение $init либо undefined (для первоначально неконтролируемого входа) или пустая строка (для первоначально проверяется). Оба они оцениваются как ложные. Почему я не получаю true/false вместо этого?

+2

re не является атрибутом 'data-init' на флажке ... –

+0

и есть несколько флажков, и ваш код является неполным. – Riddler

+0

Ваша 'data-init' не имела значения. Только пустой атрибут для флажка «checked»? Чего вы хотите достичь? –

ответ

3

Атрибут данных не рассматривается как логический атрибут с помощью JQuery (как проверено, только для чтения, и т.д.), так что вы должны дать ему значение

<td><input checked data-init="true" id="controls-0-modeU" name="controls-0-modeU" type="checkbox" value="y"></td> 

<td><input data-init="false" id="controls-1-modeU" name="controls-1-modeU" type="checkbox" value="y"></td> 

если вы хотите сохранить свою марку до вам придется делать тяжелый себя

var $init = $(this).is("[data-init]"); 
0

вы можете проверить, если элемент имеет атрибут, как так:

if (!!$(this).attr("data-init")) { 
    // its there 
} 
else { 
    // its not 
} 
+0

'!!' но почему? Несмотря на это, его атрибут на самом деле пуст и не содержит логического значения – empiric

+0

, потому что отсутствующий атрибут может возвращать 'undefined' или' false', таким образом вы можете поймать оба значения как «ложные» –

+0

Я не уверен, что это то, что OP хочет особенно с учетом связанного ответа. Он не спрашивает о проверке ценности, которую он получает, а скорее о том, почему он не получает ожидаемое значение – empiric