1

ここに私のhtmlコードの一部があります:

 <div class='images'>
<img src='6.png' class='diceimg1'>
<img src='2.png' class='diceimg2'>
<img src='5.png' class='diceimg3'>
<img src='1.png' class='diceimg4'>
<img src='3.png' class='diceimg5'>
</div>
                <form method="post">                    
                    <input type="checkbox" name="cb1" class="checkbox" value="6">
                    <input type="checkbox" name="cb2" class="checkbox" value="2">
                    <input type="checkbox" name="cb3" class="checkbox" value="5">
                    <input type="checkbox" name="cb4" class="checkbox" value="1">
                    <input type="checkbox" name="cb5" class="checkbox" value="3">

    <br />                  
    <br />                                  
    </form> 
    <p class="error"></p>

これが欲しい - クラスが で始まる画像をクリックするとdiceimg、jQuery関数はそのクラスの最後のシンボルを として$id取得し、チェックボックスを で取得しname = cb+$id、選択したプロパティを として設定します!selected。私は何を試しましたか:

$("img[class^=diceimg]").click(function () {
    $id = $this.attr("class").charAt($this.attr("class").length-1);
    $("checkbox[name^='cb$id']").attr("checked") = !$("checkbox[name^='cb$id']").attr("checked");
});

しかし、何も起こりません。以前の jQuery コードは正常に動作します。構文にエラーがありますか?

4

3 に答える 3

1

試す

$("img[class^=diceimg]").click(function () {
    $id = $(this).attr("class").charAt($(this).attr("class").length-1);
    $("input[value='" + $id + "']").prop("checked", true)
});

デモ:フィドル

与えられたhtmlで、私は次のように書くかもしれません

$("img[class^=diceimg]").click(function () {
    var $this = $(this), index = $this.index();
    $(".checkbox").eq(index).prop("checked", true)
});

デモ:フィドル

ただし、チェックボックスを1つだけ選択できるようにしたい場合

$("img[class^=diceimg]").click(function () {
    var $this = $(this), index = $this.index();
    $(".checkbox").prop('checked', false).eq(index).prop("checked", true)
});

デモ:フィドル

于 2013-06-07T03:47:32.927 に答える
1

そのようなハックを使用するのではなく、マークアップからデータを分離する必要があります。例えば:

<div class="images">
  <img src="6.png" class="diceimg" data-index="1">
  <img src="2.png" class="diceimg" data-index="2">
  <img src="5.png" class="diceimg" data-index="3">
  <img src="1.png" class="diceimg" data-index="4">
  <img src="3.png" class="diceimg" data-index="5">
</div>

属性を悪用classしてデータを隠す代わりにdata-x、対応するチェックボックス インデックスを保持する属性を導入することをお勧めします。これを行うと、クリック ハンドラーが非常に簡単になります。

$('.images').on('click', '.diceimg', function() {
    var index = $(this).data('index'),
    cb = document.getElementById('cb' + index);

    $('.checkbox')
      .prop('checked', false)
    cb.checked = true;
});

を使うgetElementById()より解決が早いので使っていquerySelectorAll()ます。フォーム自体でこの変更を行う必要があります。

<form method="post">                    
  <input type="checkbox" name="cb1" id="cb1" class="checkbox" value="6">
  <input type="checkbox" name="cb2" id="cb2" class="checkbox" value="2">
  <input type="checkbox" name="cb3" id="cb3" class="checkbox" value="5">
  <input type="checkbox" name="cb4" id="cb4" class="checkbox" value="1">
  <input type="checkbox" name="cb5" id="cb5" class="checkbox" value="3">
</form> 

デモ

于 2013-06-07T04:13:33.687 に答える