2012-06-27 3 views
0

В настоящее время Im имеют следующий скрипт, который проверяет, является ли значение флажок изменилось, но он не работает, когда я пытаюсь использовать его!

<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

идея заключается в том, чтобы предупредить, когда проверяется значение флажок отличается от ранее зарегистрированного значения CheckBox!

В настоящее время мой флажок выглядит как

<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() бы получить их, но им неправильно где-нибудь?

+0

Какой браузер? Использование '.val()' в флажке может возвращать либо «true/false», либо «здесь/там» у вас есть в зависимости от браузера. Я бы предложил использовать атрибуты 'data-' для части «value». Я бы также переключился с '.change()' на '.click()'; –

+0

плохо попробуйте теперь спасибо –

+0

im using Chrome @Cory –

ответ

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/


Edit: Если под «ранее проверено флажок» вы имеете в виду последнюю коробку пользователь нажал, то вам нужно следить за того, что сами , Нет встроенного метода 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/

+0

Проблема в том, что она работает только налево, чтобы попробовать другое направление? Im также пытается сделать противоположность вашему коду, если значение не равно if (this.value! = LastChecked.val()) { alert («предыдущая отмеченная ячейка имеет такое же значение»); } –

+0

@tyler - отредактируйте свой вопрос, чтобы * четко * указать, что вы подразумеваете под «ранее установленным флажком». Смотрите, ваш код означает, что вы хотите установить предыдущий флажок в DOM, потому что вы пытаетесь его использовать с помощью '.prev()'. Но ваш комментарий, кажется, подразумевает, что вы хотите, чтобы последний флажок был проверен пользователем. Мне непонятно, чего ты хочешь. – gilly3

+0

ahh знаю, я вижу, где я сбивал с толку большое спасибо! Я действительно имею в виду предыдущий выбранный NOT DOM! И ваш код, похоже, работал! Почему это не работает, когда я вставляю его в свой код? Im просто положил

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> 
+0

Не забывайте использовать 'prop' вместо' attr', если используете JQuery 1.6+ – jaypeagi

+0

! также устал от attr и prop еще не успел @jaypeagi –

+0

@tyler, как я упоминаю в своем решении, проблема может быть '! =' в вашем 'if' заявлении – jackwanders

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() блока

+0

? –

+0

попробуйте это что-то происходит jsfiddle.net/thetylercox/gy8EQ/2 –

+0

, если я выбираю первый блок (там), а затем другой (здесь) он работает, но если я выбираю (здесь) и (там) id does not alert –

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/

+0

попробуйте это что-то происходит http://jsfiddle.net/thetylercox/gy8EQ/2/ –

+0

, если я выбираю первый квадрат (там), а затем другой (здесь) он работает, но если я выберем (здесь) и (там) id does not alert –

+0

@tyler: Итак, вы хотите посмотреть ВСЕ предыдущие флажки? 'prev()' смотрит только на соседний родственный брат, а не на всех. Измените его на 'prevAll()', чтобы посмотреть на всех смежных братьев и сестер. Вам придется изменить код, чтобы перебрать все предыдущие флажки. –