Какое событие jquery использовать? - PullRequest
4 голосов
/ 26 ноября 2010

У меня есть такой код, чтобы включить или отключить ввод текста в сом, когда флажок отмечен.

$(document).ready(function(){
    $(":checkbox").change(function(){
        if(this.checked){
            $("input:text").attr('disabled', true);
        } else {
            $("input:text").attr('disabled', false);
        }
      });
});

Кажется, что это работает, когда пользователь нажимает на флажок, но JavaScript может изменитьсязначение флажка, вызвав:

$(":checkbox").attr('checked', true); 

Когда флажок изменен JavaScript, событие не запускается.Я пытался с событием click (), но происходит то же самое.

Есть идеи?

Спасибо.

Ответы [ 6 ]

4 голосов
/ 26 ноября 2010

Сначала давайте уменьшим количество обработчиков событий, поскольку вы передаете логическое значение .attr('disabled', bool), а .checked - логическое значение, давайте воспользуемся этим, например:

$(function(){
  $(":checkbox").change(function(){
    $("input:text").attr('disabled', this.checked);
  });
});

Тогда при программном изменении значения просто вызовите событие change, например, так:

$(":checkbox").attr('checked', true).change();

.change() без параметров - это сокращение для .trigger("change"), что приведет к запуску вашего обработчика событий.

1 голос
/ 26 ноября 2010

Вы можете просто .trigger() change event вручную:

$('input:checkbox').trigger('change');

Вы никогда не должны использовать селектор, как :checkbox. Это неявное использование универсального селектора *, который будет запрашивать все узлы на вашем сайте, что довольно плохо, а значит, довольно медленно.

input:checkbox по-прежнему будет запрашивать все ваши элементы-флажки, вы должны использовать class или id для запроса определенного элемента.

Ссылка: .trigger ()

1 голос
/ 26 ноября 2010

Вы можете попытаться запустить событие вручную:

$(":checkbox").attr('checked', true);
$(":checkbox").change();

или

$(":checkbox").attr('checked', true).change();
1 голос
/ 26 ноября 2010

Извините, если я слишком упрощен, но вы не можете позволить JavaScript вызывать событие вручную, когда оно меняет значение флажка?

1 голос
/ 26 ноября 2010

вручную вызвать событие изменения:

$(":checkbox").change();
0 голосов
/ 26 ноября 2010

Я не знаю, почему изменение флажка через javascript не запускает событие. Но у меня есть решение для этого.

Марка

function(){
        if(this.checked){
            $("input:text").attr('disabled', true);
        } else {
            $("input:text").attr('disabled', false);
        }
      }

как функция. Например, функция cb_change_handler () {...} и вы можете вручную использовать эту функцию при изменении значения с помощью JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...