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);

それを解決します。

また、ニコが言ったようにタイプミスがありました。

于 2012-06-04T17:53:05.533 に答える
1

ハックする必要はありません。 http://jsfiddle.net/dn7gM/

ps:すべてのIDが正しく設定されているわけではないため、最初の2つの無線でのみ機能します;-)

于 2012-06-04T18:44:40.937 に答える