使用jquery创建构造函数创建的访问对象

时间:2010-01-09 03:07:39

标签: javascript jquery-plugins

我有一个jquery函数,可以从常规javascript函数为所选的每个元素创建一个对话框。我想要实现的一个选项是在对话框中添加按钮。这些按钮具有分配给它们的任何功能的灵活性。

我的问题是如何访问在按钮本身的onclick事件上创建按钮的框

这是我如何创建对话框:

$('.box').dialogbox({  buttons: { 'click': function () {
    $(self).css({background:'red',border:'2px solid black'}) 
}, } });

在这种情况下,我使用$(self)来访问盒子,知道它不是正确的方法。但这是我需要修复的部分。

self by the way被声明为函数对话框的私有变量,它由$.dialogbox jquery函数以这种方式调用:

newBox = new dialogbox ( content)

PS。我道歉可能不太清楚。如果你需要更多信息,请问我问题

谢谢

3 个答案:

答案 0 :(得分:0)

在调用$.dialogbox()的位置,我们没有引用单个对话框元素/对象的任何内容。 $('.box')引用页面上的对话框集合,单击处理程序中的this引用该按钮。

一种方法是将对话框定位为按钮的祖先。 jQuery's closest()为您提供与选择器匹配的元素的最近祖先。例如:

$('.box').dialogbox({
    buttons: { 'click': function() {
        self = $(this).closest('.box');
        self.css({
            background: 'red',
            border: '2px solid black'
        });
    }}
 });

一些想法:

  • this不同,self在javascript或jQuery中没有任何预定义含义。它只是一个变量名称。如果您使用它,则必须为其分配值。

  • 在这种情况下使用self可能会有点误导 - 它是指对话框还是按钮?您可能希望将其命名为dialog或类似名称。

  • 另请注意,如果您使用的是jQueryUI对话框,则可能打算写.dialog()see ref),而不是.dialogbox()

答案 1 :(得分:0)

我相信你所描述的问题与我前几天所问的问题相同:如何引用由于函数嵌套而超出范围的对象(特别是jQuery的覆盖习惯的习惯)价值this

提供给我并且我发现最有用的解决方案是使用Prototype库的Function.bind来调用您可以指定的特定上下文中的函数。

有关其工作原理的详细信息,请查看我的问题:Preserving a reference to "this" in JavaScript prototype functions

答案 2 :(得分:0)

在得到了很好的反馈后,我想用jquery广泛实现这个选项 这是我的解决方案:

$。fn.bindFunction = function(fn){

fn.apply(本);

};

你称之为

的方式

$(本).bindFunction(FN)。

我希望这能帮助那些jquery用户