对不起这听起来多么愚蠢。我的JS词汇很糟糕,我完全不知道要搜索什么。
我正在使用jQuery。
所以我有这段代码:
var example = {
open: function(element){
alert(element.text());
},
init: function(){
$("a").click(example.open);
}
};
$(document).ready(function(){example.init();)
所以这就是问题所在:我想在单击“a”元素时将参数传递给example.open()。但是,我似乎并不喜欢。为了使example.open方法只是...存在于页面加载而不仅仅是运行,它不能有括号。我认为。所以没有办法传递它的论点。
所以我想我的问题是......你如何将一个参数传递给一个没有圆括号的函数?
非常感谢。
答案 0 :(得分:2)
插入另一个匿名函数:
var example = {
open: function(element){
alert(element.text());
},
init: function(){
$("a").click(function()
{
example.open($(this));
});
}
};
您也可以尝试这个版本,因为jQuery将函数的上下文(this
)设置为DOM元素:
var example = {
open: function(){
alert($(this).text());
},
init: function(){
$("button").click(example.open);
}
};
答案 1 :(得分:1)
您可以通过自己的处理程序传递锚点:
var example = {
open: function( element ){
alert(element.text());
},
init: function(){
$("a").on("click", function() {
example.open( $(this) );
});
}
};
$(document).ready(function() {
example.init();
});
答案 2 :(得分:1)
由于jQuery将引发事件的HTML元素绑定到this
变量,因此您只需将其作为常规参数传递:
var example = {
open: function(element){
alert(element.text());
},
init: function(){
$("a").click(function() {
// jQuery binds "this" to the element that initiated the event
example.open(this);
});
}
}
$(document).ready(function(){example.init();)
答案 3 :(得分:0)
我不明白你真正想做什么; 但是,我可以尝试一下:
var example = {
open: function(event){
event.preventDefault();
alert($(event.target).text()+' : '+event.data.x);
},
init: function(){
$("a").bind('click',{x:10},example.open);
}
};
$(example.init);
<强>演示:强> http://jsfiddle.net/rahen/EM2g9/2/
答案 4 :(得分:-1)
对不起,我误解了这个问题。
有几种方法可以解决这个问题:
在函数中包含调用:
$('a').click( function(){ example.open( $(this) ) } );
$(this)
可以用您的参数列表替换
调用另一个事件创建函数,它将参数作为参数:
$('a').bind( 'click', {yourvariable:yourvalue}, example.open );
如果open有一个名为event
的参数,您可以通过event.data
访问您的变量(在上面它是event.data.yourvariable
)
但是,除非element.text()
是jQuery对象,否则element
不会起作用。因此,您可以在将对象传递给函数之前,或者在函数接收到它之后对其进行jQueryify:
jQuery 传递对象:
function(){ example.open(this) } /* to */ function(){ example.open($(this)) }
jQuery 收到对象:
alert(element.text()); /* to */ alert($(element).text());
也就是说,当调用没有参数this
的对象时,将引用范围内的对象(生成事件)。所以,实际上,如果您不需要传递额外的参数,您可以使用以下内容:
var example = {
open: function(){ // no argument needed
alert($(this).text()); // this points to element being clicked
},
init: function(){
$("a").click(example.open);
}
};
$(document).ready(function(){
example.init();
}); // your ready function was missing closing brace '}'