当前位置:  开发笔记 > 编程语言 > 正文

jQuery UI datepicker的属性选项

如何解决《jQueryUIdatepicker的属性选项》经验,为你挑选了2个好方法。

我有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

当你调用datafunction时,它会返回一个字符串,所以你必须将它转换为一个对象,然后将它传递给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



1> Alex..:

当你调用datafunction时,它会返回一个字符串,所以你必须将它转换为一个对象,然后将它传递给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:


2> Neoaptt..:

Jquery数据自动将JSON字符串解析为对象.你只需按照指示jQuery.parseJson()

http://api.jquery.com/jquery.parsejson/

将选项从更改data-options="{maxDate:'0'}"data-options='{ "maxDate": 0 }'工作奇迹

编辑:2015年12月28日

因为在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:
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有