我希望这是我做过的傻事。我在底部附近有一个函数unigref,我相信它会输出一个字符串。但是,当我调用该函数来构建一个jQuery选择器时,我无法让它正常工作。我知道其他一切都有效,因为当我使用静态字符串时,单选按钮被选中。
这是我的jsfiddle/9Edxx。请帮忙。
var checkCount = 0;
var maxChecks = 2;
$(document).ready(function() {
$("#test").click(function() {
alert($(':checked').length);
});
$(':checkbox[name=checkbox]').change(function() {
checkCount = $(':checkbox:checked').length;
if (checkCount >= maxChecks) {
$(':checkbox[name=checkbox]').not(':checked').attr('disabled', true);
$(":radio[value="+uniqref()+"]").prop('checked', true);
} else {
$(':checkbox[name=checkbox]:disabled').attr('disabled', false);
}
if (this.checked) {
$("td.label").append("<label>" + this.value + "</label>");
} else {
$("td.label").find(":contains('" + this.value + "')").remove();
}
});
$('#button').click(function() {
alert(uniqref());
});
function uniqref() {
return $("td.label").text().split('').sort().join('').replace(/\s/g, "");
}
});
更新:输入错误是正确的,但问题仍然存在。
答案 0 :(得分:9)
是的,这真的很傻:这只是一个错字。
$(":radio[value="+unigref()+"]").prop('checked', true);
应该是
$(":radio[value="+uniqref()+"]").prop('checked', true);
使用小写Q
而不是G
。
另外,在实际更新td.label的值之前,你正在调用uniqref()。
应该按此顺序:
if (this.checked) {
// ...
}
if (checkCount >= maxChecks) {
// ...
}
答案 1 :(得分:4)
基本上这一行:
$(":radio[value="+uniqref()+"]").prop('checked', true);
被过早调用(在实际检查复选框之前。一个简单,丑陋的黑客:
setTimeout(function(next) {
$(":radio[value="+uniqref()+"]").prop('checked', true);
}, 0);
解决它。
Niko也提到了一个拼写错误。
答案 2 :(得分:1)
不需要黑客攻击。 http://jsfiddle.net/dn7gM/
p.s。:仅适用于2个第一个无线电,因为并非所有ID都设置正确; - )