Javascript设置下拉列表的布尔值

时间:2014-05-12 12:33:59

标签: javascript jquery backbone.js

我有以下代码来映射 "主动"是的 和InActive为假

var statusJSON = {
  '- Select -' : '', 
  'Active' : true, 
  'Inactive': false
};
$.each(statusJSON, function(key, val){
  $statusFlag.append('<option value=' + val + '>' + key + '</option>');
});

我也会在更改下拉列表时执行以下操作;

$("#statusFlag").change(function() {
  self.model.set({
    statusFlag: $('#statusFlag').val()
  });
});

现在的问题是,当我提交表单时,statusFlag中的值将作为字符串提交(&#34; true&#34;或&#34; false&#34;)。如何确保仅为statusFlag设置布尔值?

2 个答案:

答案 0 :(得分:1)

我不确定这是否有效,但试试看

$("#statusFlag").change(function() {
   self.model.set({
      statusFlag: $('#statusFlag').val().toLowerCase() == "true" ? true : false
   });
});

答案 1 :(得分:1)

因为实际的&#34;值&#34;元素是一个字符串,.val()返回一个字符串,以获得一个布尔值,您需要检查该字符串并返回您自己的布尔值。这样的事情:

statusFlag: $('#statusFlag').val() == 'true'

如果字符串匹配,则应将statusFlag设置为true,否则设为false

  

我如何确保只为statusFlag设置了布尔值?

定义&#34;确保&#34;在这种情况下。上面的示例将始终将statusFlag设置为布尔值,因为==比较始终会产生布尔值。但是,其他地方的其他代码可以将statusFlag设置为任何内容。 JavaScript是动态类型的,因此无法从属性本身保证只能将其设置为特定类型。

可能可能将该属性包装在一个闭包中(使它成为&#34; private&#34;)并公开一个自定义setter函数,该函数将在内部检查传递给它的任何内容并且只设置该值为布尔值。但这似乎有点过头了,特别是因为在那一点上它是什么类型并不重要,因为它是私有封装的。