Предотвратить событие Keyup во второй раз в Jquery - PullRequest
1 голос
/ 29 марта 2012

У меня есть 5 текстовых полей для ввода [Название, Имя, Ключевое слово, Описание и URL]

$("#TxtPageTitle").keyup(function () {
  $("#TxtPageName").val($(this).val());
  $("#TxtPageKeywords").val($(this).val());
  $("#TxtPageDescription").val($(this).val());
  $("#TxtPageURL").val($(this).val());
});

Я использую событие Keyup JQuery для обработки репликации. Когда я набираю что-то в заголовке (текстовое поле), оно заполняется во всех остальных 4 текстовых полях.

Проблема в том, что я сначала наберу что-нибудь в заголовке (текстовое поле), и оно заполнит все остальные текстовые поля, а позже я отредактирую значения всех 4 текстовых полей. Опять же, если изменить значение Заголовок (текстовое поле), то старые значения всех остальных 4 текстовых полей будут изменены.

Я хочу, чтобы метод Keyup работал только при первой записи. так что я могу предотвратить эту проблему.

Ответы [ 3 ]

4 голосов
/ 29 марта 2012

Один из способов сделать это - указать поля, которые вы хотите заполнить автоматически, определенным классом, например, «автозаполнение», а затем удалить этот класс из отдельных полей при их изменении, например:

$("#TxtPageTitle").keyup(function () {
    $(".autoFill").val(this.value);
});

$(".autoFill").change(function() {
    $(this).removeClass("autoFill");
});​​​​​​​​

Демо: http://jsfiddle.net/A2FsY/

Вы сказали «при первой записи», но то, что я предлагаю, лучше, чем то, что оно будет продолжать применять изменения из #TxtPageTitle к любым другим полям, которые еще не были отредактированы по отдельности. Если вы действительно хотите, чтобы он был «при первой записи», то добавьте обработчик .blur() или .change() в #TxtPageTitle согласно ответу Blade0rz.

РЕДАКТИРОВАТЬ: обратите внимание, что нет необходимости продолжать запускать событие изменения для полей, которые больше не имеют класса "autoFill", поэтому тело обработчика изменений выше можно изменить на:

$(this).removeClass("autoFill").unbind("change");
2 голосов
/ 29 марта 2012

Событие keyup будет срабатывать каждый раз, когда вы вводите 1 символ в текстовое поле.Невозможно определить количество символов в первом редактировании.Либо вы решаете фиксированное значение для количества символов в текстовом поле, после чего событие keyup становится несвязанным, либо вы добавляете команду для пользователя, чтобы «сообщить», когда он прекратил печатать, а затем открепить событие.Чтобы отменить привязку события, обратитесь к: jQuery unbind

0 голосов
/ 29 марта 2012

Вы можете отсоединить обработчик keyup, когда текстовое поле заголовка страницы теряет фокус.Это в основном означает, что пользователь закончил:

$("#TxtPageTitle").keyup(function () {
  $("#TxtPageName").val($(this).val());
  $("#TxtPageKeywords").val($(this).val());
  $("#TxtPageDescription").val($(this).val());
  $("#TxtPageURL").val($(this).val());
}).blur(function() {
  $(this).unbind("keyup");
});
...