0

私は過去2時間これに取り組んできましたが、これを理解することはできません.

クリックするとjqueryが色であるliアイテムのクラスを取得するリストアイテムがあります。次に、最初の文字を大文字にし、色が一致するチェックボックスの値を見つけて、チェック済みとしてマークします。

誰かがliアイテムをもう一度クリックすると、チェックボックスのチェックが外されるようにしたいだけです

誰かがまったく助けることができますか?

$('#colours li').live('click', function (){
    var color = $(this).attr('class');
    color = color[0].toUpperCase() + color.slice(1);
    console.log($('input[value="'+color+'"]'));
    $(this).css('opacity','0.5');

    if($('input[value="'+color+'"]:checked').length) {
        $('input[value="'+color+'"]').attr('checked', true);
        console.log("checked");
    } else {
        $('input[value="'+color+'"]').removeAttr('checked');
        console.log("not checked");
    }    
});



<ul id="colours">
        <li class="black"></li>
        <li class="brown"></li>
</ul>

<input type="checkbox" name="color" value="Black" class="hidden" />
<input type="checkbox" name="color" value="Brown" class="hidden" />

ul を追加するのを忘れており、入力は jquery .load() を使用してロードされます

4

2 に答える 2

2

属性を削除すると、文字通り DOM から削除されます。チェックされたプロパティを切り替えたいだけです。注意すべきいくつかの変更。

.live()非推奨です。.on()適切な呼び出しに置き換えました。

.attr()は、ほとんどすべての場合に推奨されなくなり、 が推奨され.prop()ます。これも交換しました。

長さをチェックする必要はありません。要素がチェックされているかどうかをチェックする必要があります。jQuery は の を提供し.is()ます。psuedo-selector:checked

$(document).on('click', '#colours li',  function() {
    var color = $(this).prop('class');
    color = color[0].toUpperCase() + color.slice(1);
    $(this).css('opacity', '0.5');

    $('input[value="' + color + '"]').prop('checked', function(i,oldVal){
        return !oldVal;
    });

});​
于 2012-11-12T22:35:02.700 に答える
1

これはする必要があります

$('#colours').on('click', 'li', function (){
  var th = $(this);
  var color = th.attr('class');
  color = color[0].toUpperCase() + color.slice(1);
  var input = $('input[value="'+color+'"]')
  console.log(input);
  th.css('opacity','0.5');

  if(input.length == 1) {
    if (input.is(':checked')) {
      input.prop('checked', false);  
      console.log("not checked");
    } else {
      input.prop('checked', true); 
      console.log("checked");
    }
  }

});
于 2012-11-12T22:36:45.300 に答える