2014-01-03 2 views
0

У меня есть немного JQuery для подавления возврата каретки, когда клиенты заполняют наши формы:Обнаружение Textarea объекта в 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 шашку как существующий код должен проверить : нет (: кнопки: отправить):

$('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 элементы управления?

Update:

Один из людей, которые отправили ответ здесь оказалось есть решение.

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

Мне понадобился мой менеджер, и я пару часов стучал по нему, чтобы решить проблему, но в конце концов мне нужно было только обрабатывать события с Вход.

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

$('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(); 
    } 
}); 

Особая благодарность Khawer Zeshan для обеспечения, что Скрипка. Мне показалось, что в моем коде есть что-то более глубокое.

+1

Быстрый поиск приводит меня к [это] (http://stackoverflow.com/a/825720/778118) ... – jahroy

+1

Получение индекса элемента в наборе? '$ ('input'). index (this)' – undefined

ответ

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'. – jp2code

+0

просто примените класс, для которого вы хотите подавить '13'. См. [FIDDLE] (http://jsfiddle.net/nZ5Kj/) –

Смежные вопросы