Как определить типы ввода при привязке события к родителю - PullRequest
1 голос
/ 15 апреля 2011

Я пытаюсь привязать событие к родителю вместо каждого ребенка.Я могу успешно проверить на SELECT, TEXTAREA и A. Как проверить на ввод [type = 'text']?

$('form').bind('focusin', function(e) {
    var target = e.target, // e.target grabs the node that triggered the event.
        $target = $(target);  // wraps the node in a jQuery object
    if (target.nodeName === 'SELECT' | target.nodeName === 'TEXTAREA' | target.nodeName === 'A') {
        alert('hi');
        // do stuff
    }
});

Ответы [ 3 ]

2 голосов
/ 15 апреля 2011

Могу ли я порекомендовать изменить ваш код на что-то вроде этого:

$('form').bind('focusin', function(e) {
    var $target = $(this); // wraps the node in a jQuery object
    if ($target.is('select') || $target.is('textarea') || $target.is('a') || $target.is('input[type="text"]') {
        alert('hi');
        // do stuff
    }
});

В качестве альтернативы вы можете использовать селектор :input для выбора всех элементов формы:

$target.is(':input')

http://api.jquery.com/input-selector/

2 голосов
/ 15 апреля 2011

Примечание: из jQuery 1.7 используйте on() вместо delegate()


Использование delegate() звуковсамый простой и самый подходящий для меня.

$('form').delegate('textarea, select, a, input[type="text"]', 'focusin', function () {
  alert('hu');
  //do stuff
});

На самом деле он делает именно то, что вы просили.Само событие присоединяется к form и проверяет, соответствует ли target указанному селектору.

Live Demo

Нет необходимости заново изобретать колесо.

0 голосов
/ 15 апреля 2011
if ($target.attr('type')=='text') {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...