Перегрузка jQuery в зависимости от типа ввода - PullRequest
0 голосов
/ 04 ноября 2010

Я хотел бы создать функцию jQuery, которую можно прикрепить к событиям change () элементов формы, но чтобы функция решала, что делать в зависимости от типа (input, select, radio, password) элемента формы.

Проблема в том, что я не уверен в лучшем подходе - написать большую функцию, которая сама решает, что делать, или написать своего рода фабричную функцию, которая присоединяет соответствующую функцию к элементу на основе его типа ...я изобретаю колесо?т. е. есть ли по умолчанию способ сделать что-то подобное в jQuery.

[Дополнительно: если это влияет на решение, функция должна быть вызвана на load (), а также сказать на change ()было бы неплохо иметь возможность подать заявку / звонок?функция только один раз]

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Вы можете сделать то, что вы хотите, разделить на части довольно легко с помощью нескольких переключателей:

$.fn.myPlugin = function() {
   return this.each(function() {
     switch(this.nodeName) {
       case "INPUT":
         switch(this.type) {
           case "radio":
             $(this).change(function() { .... });
             break;
           case "text":
             $(this).change(function() { .... });
             break;
           /*password, etc....*/
         }
         break;
       case "SELECT":
         $(this).change(function() { .... });
         break;
       case "TEXTAREA":
         $(this).change(function() { .... });
         break;
     }         
   });
};

Теперь вопрос о том, является ли это лучшим подходом, безусловно, подлежит обсуждению ... это зависит от того, будет ли у вас уникальноекаждый или некоторые из них имеют общее поведение, и в этом случае вы, вероятно, захотите определить общие функции в замыкании и сослаться на них, например:

(function($) {
    function method1() { ... }
    function method2() { ... }
    function method3() { ... }

    $.fn.myPlugin = function() {
       return this.each(function() {
         switch(this.nodeName) {
           case "INPUT":
             switch(this.type) {
               case "radio":
                 $(this).change(method1);
                 break;
               case "text":
                 $(this).change(method3);
                 break;
               /*password, etc....*/
             }
             break;
           case "SELECT":
             $(this).change(method1);
             break;
           case "TEXTAREA":
             $(this).change(method2);
             break;
         }         
       });
    };    
})(jQuery);

Вы можете сделать это как минимум 20 способами, этоЭто просто предложение, если каждый элемент и тип имеет определенное поведение, которое звучит как случай из вашего вопроса.Если это не просто игнорировать меня:)

1 голос
/ 04 ноября 2010

Я бы предпочел, чтобы ether запускал разные функции jquery на разных типах ввода, а затем вызывал некоторые другие функции (или ту же функцию javascript с типом ввода в качестве параметра), или писал бы, как вы говорите, тип фабрики. функция, которая может решить, какое действие предпринять, основываясь на типе управления вводом, который был изменен.

...