0

現在、チェックボックスの値が変更されたかどうかを確認する次のスクリプトがありますが、使用しようとすると機能しません!

<script>
    $('input[type=checkbox]').change(function () {
        if ($(this).is(':checked')) {
            if ($(this).prev().attr('checked') && $(this).val() != $(this).prev().val()) {
                alert("previous checkbox has same value");
            }
        }
    });​
 </script>

 <input name="" type="checkbox" value="here"/>(if this was checked)
 <input name="" type="checkbox" value="here"/>(then this)
 <input name="" type="checkbox" value="there"/>(would not allow prompt alert) 
 <input name="" type="checkbox" value="here"/>(would allow)​

ここで動作していることがわかりますが、使用しようとすると動作しません http://jsfiddle.net/rajaadil/LgxPn/7

アイデアは、チェックされたチェックボックスの値が以前にチェックされたチェックボックスの値と異なる場合に警告することです!

現在、私のチェックボックスは次のようになっています

<input type="checkbox" name="checkbox[]" onClick="getVal();setChecks(this)" value="`key`=<?php echo $rspatient['key']?>" class="chk" id="chk<?php echo $a++?>"/>

関数はこれらを取得すると思っていました('input[type=checkbox]').change(function()が、どこか間違っていますか?

4

4 に答える 4

1

前にチェックした兄弟チェックボックスを選択するには、次を使用します。

$(this).prevAll(":checked:first")

使用する予定:lastでした:firstが、動作します。これは私には直感に反し、通常の動作方法と一貫性がありません:first:last、いくつかのブラウザーでテストしたところ、結果は一貫しています。

$(':checkbox').change(function() {
    if (this.checked) {
        var lastChecked = $(this).prevAll(":checked:first");
        if (this.value == lastChecked.val()) {
            alert("previous checked box has same value");
        }
    }
});

デモ: http: //jsfiddle.net/LgxPn/15/


編集:「以前にチェックしたチェックボックス」とは、ユーザーが最後にクリックしたボックスを意味する場合は、それを自分で追跡する必要があります。クリック履歴について何かを教えてくれる組み込みのjQueryメソッドはありません。

ユーザーが最初にいくつかのボックスをチェックし、次にボックスをチェックしてすぐにチェックを外すとどうなりますか?次にチェックしたボックスを使用する必要がありますか?その場合は、すべてのチェックボックスと、それらがクリックされた順序を追跡する必要があります。チェックボックスを追跡する方法は次のとおりです。

var lastChecked = [];
$(':checkbox').change(function() {
    if (this.checked) {
        if (lastChecked.length && this.value == lastChecked[0].value) {
            alert("the last box you checked has the same value");
        }
        lastChecked.unshift(this);
    }
    else {
        lastChecked.splice(lastChecked.indexOf(this), 1);
    }
});​

デモ: http: //jsfiddle.net/LgxPn/21/

于 2012-06-27T21:43:12.290 に答える
0

推測(より良い構文で)、これを試してください:

<script type="text/javascript">
$(function() {
  $('input:checkbox').change(function() {
    if($(this).is(':checked'))
    {
       if ($(this).prev().prop('checked') && $(this).val() != $(this).prev().val()) { 
         alert("previous checkbox has same value");
       }
    }
  });​
});

</script>
于 2012-06-27T20:06:07.203 に答える
0

これはChromeでうまくいくようです:

$(function() {
    $('input[type=checkbox]').click(function() {
        if ($(this).is(':checked')) {
            if ($(this).prev().prop('checked')) {
                if ($(this).val() != $(this).prev('input[type=checkbox]').val()) {
                    alert("previous checkbox has same value");
                }
            }
        }
    });
});​

ここに JSFiddle があります: http://jsfiddle.net/gy8EQ/

于 2012-06-27T20:22:12.653 に答える
0

警告メッセージとifステートメントが一致しません。値が等しいかどうかを確認します!=が、アラートには値が等しいと表示されます。アラートは、チェックしたいケースだと思います。試す:

$(':checkbox').change(function() {
  var $this = $(this);
  var $prev = $this.prev();
  if($this.is(':checked')) {
    if($prev.is(':checked') && $this.val() === $prev.val()) {
      alert('Previous checkbox has same value');
    }
  }
});​

他の人が述べたように、これがすべて$(document).ready()ブロック内にあることを確認してください

于 2012-06-27T20:14:52.310 に答える