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

您的警报消息和您的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 回答
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 回答