我无法返回jQuery bind的回调函数中的任何内容

时间:2012-03-06 15:24:37

标签: javascript jquery jquery-plugins

任何人都可以解释为什么会这样吗?

这是我在名为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

这完全让我疯了。谢谢,如果有人可以帮助我。

编辑:

您可以阅读我的完整代码here

3 个答案:

答案 0 :(得分:4)

在你的插件中,你只是在元素上附加一个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元素数组。

答案 1 :(得分:2)

这都是因为你的'某事'功能不会返回任何东西。

答案 2 :(得分:0)

一个巨大的问题......"某事"当您使用选择器

调用它时,插件中的拼写与jQuery方法链的拼写不同