我有以下代码来映射 "主动"是的 和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
设置布尔值?
答案 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函数,该函数将在内部检查传递给它的任何内容并且只设置该值为布尔值。但这似乎有点过头了,特别是因为在那一点上它是什么类型并不重要,因为它是私有封装的。