Я не могу вернуть что-либо в функцию обратного вызова JQuery Bind - PullRequest
1 голос
/ 06 марта 2012

Кто-нибудь может объяснить, почему это происходит?

Это мой код в плагине с именем something:

(function($){
$.fn.extend({
    something: function(options) {
       // Here I define defaults
       $(this).bind('change', function () { 
          return $(this).each(function() {
          // a function body
          });
       });
     }
});
})(jQuery);

, и я вызываю этот плагин в другом js, например:

var myarray=new Array();
myarray[0] = $('#selector').something({
regex:/^([\u0600-\u06FF]|\s)*$/,
    // another options
    });
$('#selector').change(function (){
    alert (myarray[0]);
});

при каждом изменении в моем селекторе он возвращает меня undefined.

Это полностью сводит меня с ума.Спасибо, если кто-нибудь может мне помочь.

Редактировать:

Вы можете прочитать мой полный код здесь .

Ответы [ 3 ]

4 голосов
/ 06 марта 2012

В вашем плагине вы просто присоединяете обработчик события change к элементу, который просто запускает цикл для всего соответствующего набора элементов и возвращает объект jQuery.

Если вы хотите вернуть что-то из плагина something, то оператор return должен быть вне обработчика события.

$.fn.extend({
    something: function(options) {
          return $(this).each(function() {
               //Do processing here
          });
     }
});

Теперь вы можете использовать это

var myarray = $('#selector').something({
        regex:/^([\u0600-\u06FF]|\s)*$/,
        // another options
});
$('#selector').change(function (){
    alert (myarray[0]);
});

Обратите внимание, что myarray будет массивом, потому что jQuery each возвращает объект jQuery, который сам по себе является массивом элементов DOM.

2 голосов
/ 06 марта 2012

Это все потому, что ваша функция "что-то" ничего не возвращает.

0 голосов
/ 06 марта 2012

Одна огромная проблема ... «что-то» пишется иначе в плагине, чем цепочка методов jQuery, когда вы вызываете это с помощью селектора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...