2012-03-29 11 views
49

Próbuję pobrać atrybut danych typu Boolean z elementu html DIV, jednak zawsze zwraca on wartość false, gdy ciąg jest konwertowany na wartość logiczną.Pobieranie danych boolowskich z atrybutu danych w jquery

HTML

<div id='test' data-return="true"></div> 

JS

isreturn_str = $('#test').data('return'); 
isreturn = (isreturn_str === 'true'); 
if (isreturn) { 
    document.write("It is true"); 
} else { 
    document.write("It is false"); 
} 

wyjście

Nieprawdą jest

http://jsfiddle.net/neilghosh/494wC/

Odpowiedz

83

JQuery .data() metoda jest mądry o uznaniu wartości logicznych i numerycznych i przekształca je w ich rodzimym typu. Więc ta zwraca wartość logiczna true nie "true":

$('#test').data('return'); 

Jeśli chcesz uzyskać dane surowe (bez automatycznej konwersji danych), można użyć .attr():

$('#test').attr("data-return"); 

Patrz przypadek testowy roboczego tutaj: http://jsfiddle.net/jfriend00/6BA8t/

+10

Upewnij się, że wartości atrybutów "true" i "false" są małe, aby działało poprawnie. –

+2

jest sposób, aby uczynić go niewrażliwym na wielkość liter, dla zgodności MVC? –

+0

@ TomerW - Nie. '.data()' i '.attr()' a nawet funkcja DOM '.getAttribute()' są rozróżniane wielkości liter. – jfriend00

4

jQuery rozpoznaje ciąg „true”, jak to logiczna odpowiednik (w kontekście atrybutów danych), a więc:

typeof isreturn_str; // boolean 

ale jesteś ściśle porównując do łańcucha 'true' co daje fałszywe jako ciąg nie jest a boolean.

3

"true" jest wewnętrznie odlewane do boolean (spróbuj alert (typeof(isreturn_str))), a więc twoje porównanie === kończy się niepowodzeniem podczas sprawdzania typu.

Można zadzwonić .toString()

isreturn_str = $('#test').data('return').toString(); 

http://jsfiddle.net/494wC/8/

+0

Łącze do skrzypiec nie otworzyło tutaj kodu. Mógłbyś rzucić okiem? –

0

Używam jQuery 2.1.0 i muszę używać eval

// $('#test').attr("data-return");" doesn't works 
eval($('#test').attr("data-return")); 
Powiązane problemy