Jquery .keyup для динамически добавляемого текстового поля

#php #javascript #jquery #drupal

#php #javascript #jquery #drupal

Вопрос:

Как добавить событие keyup для динамически добавляемого текстового поля.я разрабатываю веб-приложение на drupal.когда я попытался использовать «live», меню не работают

 $('input[id$="-code"], input[id$="-case"], input[id$="-vehicle-no"]')
.live('keyup', function(e){
   $(this).val($(this).val().toUpperCase());
});
  

Комментарии:

1. Что вы имеете в виду под «не работает»? Вы должны добавить всю соответствующую информацию при задании вопроса.

Ответ №1:

Чтобы избежать путаницы в коде, добавьте класс в поле ввода, которое вы добавляете динамически, чтобы вам было легко. В любом случае использование live будет работать. Посмотрите на эту скрипку

http://jsfiddle.net/QugQw/1/

Комментарии:

1. @swordfish..in в моем случае после нажатия кнопки «Добавить» создается строка с четырьмя текстовыми полями. Среди этого текстового поля «транспортного средства нет». Только для этого конкретного текстового поля я хочу добавить это событие. Как я могу настроить код ur в соответствии с этим..

2. @user731060: просто включите class="b" в поле, к которому вы хотите привязать событие keyup.

3. @user731060 просто укажите класс для поля, в котором вы хотите вызвать событие.

Ответ №2:

«@swordfish..in в моем случае после нажатия кнопки «Добавить» создается строка с четырьмя текстовыми полями.Среди этого текстового поля «транспортного средства нет».Только для этого конкретного текстового поля я хочу добавить это событие.Как я могу настроить ur-код в соответствии с этим ..«

Похоже, вы создаете новые строки, содержащие поля, к которым вы хотите прикрепить событие keyup. Если это так, то у вас может быть более одного элемента на одной странице с одинаковым идентификатором. Большой нет-нет.

Вместо этого, как предложила swordfish, добавьте класс к полям, к которым вы хотите присоединить событие keyup (используя этот класс в селекторе jQuery), и удалите атрибут id, используя вместо него только атрибут name (но не используя атрибут name для селектора jQuery — он вам не понадобится).

Комментарии:

1. идентификатор текстового поля vehicle_no будет отличаться в каждой строке

2. Хороший момент. Но атрибут ID в любом случае на самом деле не нужен. Вместо этого вы можете использовать атрибут name и избежать риска.

Ответ №3:

Вы можете сделать это и другим способом. Хотя это нарушит «Не повторяйся». Обратитесь к этому разделу в часто задаваемых вопросах jquery, проблема с динамически создаваемыми элементами. Вместо того, чтобы использовать live, просто используйте .keyup() с селектором. Вы снова объявляете эти привязки под кодом, в котором элементы создаются динамически. Используйте приведенное ниже где-нибудь в коде внутри $(document) .метод ready().

 $('input[id$="-code"], input[id$="-case"], input[id$="-vehicle-no"]')
.keyup(function(e){
$(this).val($(this).val().toUpperCase());
});
  

И ниже кода, в котором вы динамически создаете эти элементы, укажите ниже.

 $('input[id$="-code"], input[id$="-case"], input[id$="-vehicle-no"]')
.unbind('keyup').keyup(function(e){
$(this).val($(this).val().toUpperCase());
});
  

Если все в порядке, это должно сработать. Попробуйте.

Ответ №4:

Для новых элементов в jQuery вы используете функцию live. Но если вы используете Drupal, вы должны использовать поведение. Я действительно не совсем понимаю вашу проблему, но я читал, что вы пытаетесь использовать live, поэтому я думаю, что это может помочь http://drupal.org/node/756722#behaviors