2012-03-29 14 views
49

Estoy tratando de recuperar un atributo de datos de tipo Booleano de un elemento html DIV, sin embargo, siempre devuelve falso cuando la cadena se convierte en booleana.Recuperar datos booleanos del atributo de datos en 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"); 
} 

salida

Es falso

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

Respuesta

83

El .data() método jQuery es inteligente sobre el reconocimiento de los valores booleanos y numéricos y las convierte en su tipo nativo. Por lo que este devuelve el booleano true, no "true":

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

Si desea obtener los datos en bruto (sin la conversión automática de datos), puede utilizar .attr():

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

Véase el caso de prueba de trabajo aquí: http://jsfiddle.net/jfriend00/6BA8t/

+10

Asegúrese de que los valores de los atributos "verdadero" y "falso" estén en minúscula para que esto funcione correctamente. –

+2

¿hay alguna manera de hacerlo insensible a mayúsculas y minúsculas, para la compatibilidad de MVC? –

+0

@TomerW - No. '.data()' y '.attr()' e incluso la función DOM '.getAttribute()' son sensibles a mayúsculas y minúsculas. – jfriend00

4

jQuery reconoce la cadena "true" que su versión para booleano (en el contexto de atributos de datos) y de este modo:

typeof isreturn_str; // boolean 

pero usted está estrictamente comparando a la cadena 'true' que produce falsa como una cadena no es un booleano

3

"true" se convierte internamente en booleano (intente alert (typeof(isreturn_str))), por lo tanto, su comparación === falla en el control de tipo.

Se podría llamar .toString()

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

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

+0

El enlace al violín no ha abierto el código aquí. Podrías echar un vistazo ? –

0

estoy usando jQuery 2.1.0 y tengo que usar eval

// $('#test').attr("data-return");" doesn't works 
eval($('#test').attr("data-return")); 
Cuestiones relacionadas