0

我希望这是我做过的愚蠢的事情。我在底部附近有一个函数 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, "");
}


});​

更新:错字是正确的,但问题仍然存在。

http://jsfiddle.net/9Edxx/

4

3 回答 3

9

是的,这真的很愚蠢:这只是一个错字。

$(":radio[value="+unigref()+"]").prop('checked', true);

应该

$(":radio[value="+uniqref()+"]").prop('checked', true);

用小写Q而不是G.


此外,您在实际更新 td.label 的值之前调用了 uniqref()。

应该是这个顺序:

if (this.checked) {            
    // ...
}

if (checkCount >= maxChecks) {            
    // ...
}

http://jsfiddle.net/7mvmT/7/

于 2012-06-04T17:36:36.147 回答
4

http://jsfiddle.net/7mvmT/6/

基本上这一行:

$(":radio[value="+uniqref()+"]").prop('checked', true);

被过早地调用(在实际选中复选框之前。一个简单而丑陋的黑客:

setTimeout(function(next) {               
     $(":radio[value="+uniqref()+"]").prop('checked', true);    
}, 0);

解决它。

正如 Niko 提到的,你还有一个错字。

于 2012-06-04T17:53:05.533 回答
1

无需破解。 http://jsfiddle.net/dn7gM/

ps:仅适用于前 2 台收音机,因为并非所有 id 都设置正确;-)

于 2012-06-04T18:44:40.937 回答