Обнаружение объекта Textarea в jQuery

0

У меня есть немного jQuery, чтобы подавить возврат каретки, когда клиенты заполняют наши формы:

$('form.eForm:not(.suppress-submit-on-enter-key-disabled) :not(:button, :submit)').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

Тем не менее, он также смог подавить возврат каретки в наших блоках комментариев.

Казалось, достаточно просто добавить средство проверки textarea например, существующий код должен проверять : not (: button,: submit):

$('form.eForm:not(.suppress-submit-on-enter-key-disabled) :not(:button, :submit, :textarea)').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

Упс! : not (: button,: submit,: textarea) не работает, потому что кажется, что textarea не определена для этой части jQuery.

Как другие обнаруживают эти элементы управления TextArea?

Обновить:

Один из тех, кто отправил ответ, оказался у него.

Класс eForm, из которого генерируются все наши формы, как-то ловил это.

Потребовался мой менеджер и я пару часов, забирая это, чтобы решить проблему, но в конце концов мне нужно было только обрабатывать события из элемента управления Input.

Вот наш конечный результат:

$('form.eForm:not(.suppress-submit-on-enter-key-disabled) :input:not(:button, :submit, textarea)').keypress(function (e) {
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

Особая благодарность Хауре Цзэшуну за то, что он предоставил этот скрипт. Мне показалось, что в моем коде есть что-то более глубокое.

  • 1
    Быстрый поиск приводит меня к этому ...
  • 1
    Получение индекса элемента в наборе? $('input').index(this)
Теги:

2 ответа

4
Лучший ответ

Почему вы не используете id для одного textarea и имени class для нескольких селекторов?

Только для одного textarea:

$('#textareaid').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

Для нескольких полей используйте class name и примените тот же класс для этих полей:

$('.textareaClass').keypress(function(e){
  if(e.which == 13){
    // Cancel submit event
    e.preventDefault();
    // Give focus to next input element
    $(':input').eq($(this).index(':input') + 1).focus();
  }
});

FIDDLE

  • 0
    Это было бы хорошо, но это входит в файл core.js нашей компании, который используют все страницы. И я действительно не хочу подавлять 13 для элементов управления textarea .
  • 0
    просто примените класс, для которого вы хотите подавить 13 . Смотри СКРИТКУ
1

Я недавно имел такую же озабоченность и создал этот очень простой плагин jQuery для него

https://github.com/aymanrb/jquery-tabable-required

Ещё вопросы

Сообщество Overcoder
Наверх
Меню