Set Data- Html5 Value By Default
Solution 1:
You're seeing this behavior because jQuery data() method attempts to convert attributes into Javasript values, below is an excerpt from the manual:
Every attempt is made to convert the string to a JavaScript value (this includes booleans, numbers, objects, arrays, and null).
To retrieve the value's attribute as a string without any attempt to convert it, use the attr() method.
According to HTML5 specification regarding boolean attributes:
If the attribute is present, its value must either be the empty string or a value that is an ASCII case-insensitive match for the attribute's canonical name, with no leading or trailing whitespace.
The values "true" and "false" are not allowed on boolean attributes. To represent a false value, the attribute has to be omitted altogether.
This is probably the reason why jQuery returns empty string as value for data-sg-img-zoom
attribute.
Testing for presence of the attribute
If you would like to test only initial presence of the attribute data-attr
such as <div data-attr>
then both jQuery data()
and attr()
return undefined
, so the following code could be used:
var is_set = (typeof $(el).attr('data-attr') === 'undefined') ? true : false;
or
var is_set = (typeof $(el).data('attr') === 'undefined') ? true : false;
Testing for presence of the attribute and true
/false
values
If you would like to test for presence of the attribute data-attr
AND values true
/false
such as <div data-attr>
, <div data-attr="true">
and <div data-attr="false">
, use the code below.
var el_data_attr = $(el).data('attr');
var is_set = (
// If attribute is specified
typeof el_data_attr !== 'undefined'
// And no value is given or value is evaluated to true
&& (el_data_attr === '' || el_data_attr)
) ? true : false;
As a side effect, attribute values 1
, foo
will also be treated as true
; and 0
, null
, NaN
will be treated as false
.
Solution for your example
Since you retrieve all data-
attributes with single data()
call, you need to use the following code:
var $meZoom = (
$meData.hasOwnProperty('sgImgZoom')
&& ($meData.sgImgZoom === '' || $meData.sgImgZoom)
) ? true : false;
Post a Comment for "Set Data- Html5 Value By Default"