我有data-options属性的输入.
我想使用data-options值作为选项加载datepicker.现在使用以下代码,不起作用
$("input.data").each(function(){ var dateOptions=$(this).data('options'); $(this).datepicker(dateOptions) });
但如果我把选项放在js上,如下面的代码所示,它可以工作:
$("input.data").each(function(){ $(this).datepicker({maxDate:'0'}) });
https://jsfiddle.net/VixedS/exfLf6o9/
如果有人可以,我宁愿没有评估的答案.
Alex.. 11
当你调用data
function时,它会返回一个字符串,所以你必须将它转换为一个对象,然后将它传递给datepicker
并从值中删除大括号data-options
.
解决方案:
1-使用 eval
使用Javascript
eval('({' + $(this).data('options') + '})')
HTML
data-options="maxDate:'0'"
2- Jquery .data
并围绕您的数据属性值'
使用Javascript
$(this).data('options')
HTML
data-options='{"maxDate":0}'
3-使用插件或编写自定义函数(下面的代码由@allenhwkim编写).
使用Javascript
function JSONize(str) { return str // wrap keys without quote with valid double quote .replace(/([\$\w]+)\s*:/g, function(_, $1){return '"'+$1+'":'}) // replacing single quote wrapped ones to double quote .replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"'}) } jQuery.parseJSON(JSONize($(this).data('options')));
HTML
data-options="{maxDate:'0'}"
注意:以上所有解决方案都经过测试,可以使用.
$("input.dataWithoutOptions").each(function() {
$(this).datepicker({
maxDate: '0'
})
});
$("input.data").each(function() {
var dateOptions = eval('({' + $(this).data('options') + '})');
console.log(typeof($(this).data('options'))); //String
console.log(typeof(dateOptions)); //Object
$(this).datepicker(dateOptions)
});
input {
display: block;
margin: 10px 0 20px;
padding: 5px;
}
This has options attr:
This is just a date pick:
的jsfiddle
当你调用data
function时,它会返回一个字符串,所以你必须将它转换为一个对象,然后将它传递给datepicker
并从值中删除大括号data-options
.
解决方案:
1-使用 eval
使用Javascript
eval('({' + $(this).data('options') + '})')
HTML
data-options="maxDate:'0'"
2- Jquery .data
并围绕您的数据属性值'
使用Javascript
$(this).data('options')
HTML
data-options='{"maxDate":0}'
3-使用插件或编写自定义函数(下面的代码由@allenhwkim编写).
使用Javascript
function JSONize(str) { return str // wrap keys without quote with valid double quote .replace(/([\$\w]+)\s*:/g, function(_, $1){return '"'+$1+'":'}) // replacing single quote wrapped ones to double quote .replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"'}) } jQuery.parseJSON(JSONize($(this).data('options')));
HTML
data-options="{maxDate:'0'}"
注意:以上所有解决方案都经过测试,可以使用.
$("input.dataWithoutOptions").each(function() {
$(this).datepicker({
maxDate: '0'
})
});
$("input.data").each(function() {
var dateOptions = eval('({' + $(this).data('options') + '})');
console.log(typeof($(this).data('options'))); //String
console.log(typeof(dateOptions)); //Object
$(this).datepicker(dateOptions)
});
input {
display: block;
margin: 10px 0 20px;
padding: 5px;
}
This has options attr:
This is just a date pick:
Jquery数据自动将JSON字符串解析为对象.你只需按照指示jQuery.parseJson()
http://api.jquery.com/jquery.parsejson/
将选项从更改data-options="{maxDate:'0'}"
为data-options='{ "maxDate": 0 }'
工作奇迹
因为在XHML中你不想使用single '
作为属性,你可以使用oposite然后用double替换单引号然后解析json响应.{ 'maxDate': 0 }
然后.replace(/'/g, '"')
使用$.parseJSON()
$("input.dataWithoutOptions").each(function() {
$(this).datepicker({
maxDate: '0'
})
});
$("input.data").each(function() {
var dateOptions = $.parseJSON($(this).data('options').replace(/'/g, '"'));
$(this).datepicker(dateOptions);
});
input {
display: block;
margin: 10px 0 20px;
padding: 5px;
}
This has options attr:
This is just a date pick: