#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 будет работать. Посмотрите на эту скрипку
Комментарии:
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