谁能解释为什么会这样?

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

最佳答案

在您的插件中,您只是将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返回一个本身是DOM元素数组的jQuery对象。

07-24 09:50
查看更多