【发布时间】:2018-01-10 09:36:33
【问题描述】:
我正在做一个项目,我想根据匹配的正则表达式模式检查复选框。 MY_JSFIDDLE
我遇到了一个非常奇怪的行为:
function checkRegEx() {
$.each(myjson, function (i, v) {
var feedname = this.name;
var regExPat1 = document.getElementById('regExField').value;
var regExPat = new RegExp(regExPat1, 'gi');
var matched_bool = regExPat.test(feedname);
//console.log(matched_bool==true);
if(matched_bool==true) {
$("#"+feedname).prop('checked',true);
//$("#"+feedname).click(); // THIS WORKS STRANGELY
console.log($("#"+feedname).prop('checked'));
//console.log("eval TRUE #" + feedname)
} else {
$("#"+feedname).prop('checked', false);
//console.log("eval FALSEE #" + feedname)
};
});
document.getElementById("regExField").focus();
};
我可以更改和读出复选框的状态,但不会影响 GUI。
当我使用$("#"+feedname).click(); 时,它会按我的预期工作。所以我打电话给ID是对的。我正在开发最新的 Chrome。奇怪的是我发现了另一个jsfiddle。这里prop 方法对我有用。所以这不可能是浏览器问题。
(我知道 jsfiddle 使用 jquery_edge,这不是它在那里工作而不是在我的工作的原因——我在两个 jsfiddles 中测试了不同的 jquery 版本)
任何建议。看不到我在这里做错了什么。
编辑
请注意,尽管我调用了var feedname = this.name;,但我仍然引用了 ID。 (myjsfiddle 代码在此处发布的代码上方的几行代码)
编辑 2
我将 myjson IDS 重命名为“foo”。
在代码部分
var feedname = this.name;
...
$("<br><input>").attr({
'id' : feedname,
'type': 'checkbox',
...
我将 ID 名称设置为复选框标签名称。我做错了什么:/
【问题讨论】:
-
您的代码不需要 if 语句。只需使用
$('#' + feedname).prop('checked', matched_bool);。 -
true,优化代码。但让我们看看它是否解决了这里的问题,不要这样。
-
更新了我的 jsfiddle。它仍然无法正常工作。我有 if 语句,因为只使用 click() 有一些效果。
-
但是您首先要达到的目标是什么...您的 JSON 具有
id和name两者...但是您的选择器需要一个id(因为您是使用#)。 -
是的 cmets 不是答案,他们是 cmets...
标签: javascript jquery html checkbox