【问题标题】:Javascript set boolean value for dropdownJavascript为下拉菜单设置布尔值
【发布时间】:2014-05-12 20:40:20
【问题描述】:

我有以下代码要映射 “活跃”为真 和 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 中的值作为字符串(“true”或“false”)提交。如何确保只为 statusFlag 设置布尔值?

【问题讨论】:

  • 我认为对于选择元素,只允许使用字符串值,因此将布尔值转换为字符串。尝试将其与字符串“true”或“false”进行比较
  • statusFlag: statusJSON[$('#statusFlag').val()] ?
  • 提交一个布尔值是什么意思?如果您正在谈论使用 HTTP POST 提交,则只能发送字符串。
  • 在我的情况下实际上有 3 个可能的值..."true","false" 和 "" ...最后一个如果没有选择 (- Select -)

标签: javascript jquery backbone.js


【解决方案1】:

我不确定这是否有效,但请尝试一下

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

【讨论】:

  • Thx...但实际上在我的情况下有 3 个可能的值..."true","false" 和 "" ...最后一个如果没有选择 (- Select -)
【解决方案2】:

由于元素的实际“值”是一个字符串,而.val() 返回一个字符串,要获得一个布尔值,您需要检查该字符串并返回一个您自己的布尔值。类似的东西:

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

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

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

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

可以也许将属性包装在一个闭包中(使其“私有”)并公开一个自定义设置器函数,该函数将在内部检查传递给它的任何内容,并且只将该值设置为布尔值.但这似乎有点矫枉过正,特别是因为此时它是什么类型并不重要,因为它无论如何都是私有封装的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多