任何人都可以解释为什么会这样吗?
这是我在名为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。
答案 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方法链的拼写不同