Javascript jquery插件中的这个插件正在返回未定义的
有人能解释一下为什么this.rel会返回未定义的,以及正则表达式应该做什么吗。 如果this.rel未定义,则正则表达式也将不起作用,并导致某种错误,因为下面的警报不会触发Javascript jquery插件中的这个插件正在返回未定义的,javascript,jquery,Javascript,Jquery,有人能解释一下为什么this.rel会返回未定义的,以及正则表达式应该做什么吗。 如果this.rel未定义,则正则表达式也将不起作用,并导致某种错误,因为下面的警报不会触发 $.fn.facebox= function(settings) { init(settings) function clickHandler() { $.facebox.loading(true) alert($(this).attr('rel')); //alert(String(this
$.fn.facebox= function(settings) {
init(settings)
function clickHandler() {
$.facebox.loading(true)
alert($(this).attr('rel'));
//alert(String(this.rel));
// support for rel="facebox.inline_popup" syntax, to add a class
// also supports deprecated "facebox[.inline_popup]" syntax
var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
alert(klass);
alert('ppp');
// if (klass) klass = klass[1]
//fillfaceboxFromHref(this.href, klass)
return false
}
return this.click(clickHandler)
}
谢谢,richardjQuery对象有许多属性,其中之一是包含已找到元素的数组 您必须遍历此数组并将事件绑定到以下单个元素:
jQuery.fn.extend({
facebox: function()
{
//here this is a jQuery-object
function clickHandler()
{
//here this is a DOMElement
alert($(this).attr('rel'));
return false
}
return this.each(function() {
var self = jQuery(this);
self.click(clickHandler)
});
}})) 您不应该依赖JavaScript引擎向代码中添加分号。相信我,这会让调试变得很痛苦。我知道,但这并不会导致未定义的问题。像这样执行jQuery.fn.extend({facebox:function()我知道为什么this.rel不起作用。这是因为它不是img标记固有的。我在一个链接标记上测试了它,它起了作用。关于区别:我想说的是添加多个方法的重要选项。此外,$.extend使您能够确定是否存在使用名称的现有对象(如果有)应完全覆盖或仅扩展。您使用的分配实际上将始终覆盖。您的意思是,如果有一个facebox打开,而要使用其他方法打开另一个facebox,则第一个facebox也可以使用此方法。我认为使用此模式是因为它一次只允许打开一个窗口。我没有看到fancybox使用extend ei另外,它只是通过使用jquery自己的名称空间向jquery名称空间添加广告。我也想采用这种模式。不,我不是这个意思。扩展不适用于函数(插件通常是什么)。这更像是一种OOP,您可以添加新的或更改对象的现有属性。另外,创建自己的插件时可能更有趣的是extend()的可选第一个参数。如果设置为false,则不会过度编写现有函数。