我有一个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。我道歉可能不太清楚。如果你需要更多信息,请问我问题
谢谢
答案 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用户