0

对不起,这听起来多么愚蠢。我的 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 方法仅...存在于页面加载而不只是运行,它不能有括号。我认为。所以没有办法通过它的论点。

所以我想我的问题是......你如何将参数传递给不能有括号的函数?

非常感谢。

4

5 回答 5

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);
    }
};
于 2012-05-02T16:49:52.040 回答
1

您可以通过自己的处理程序传递锚点:

var example = {
    open: function( element ){
       alert(element.text());
    },
    init: function(){
      $("a").on("click", function() {
        example.open( $(this) );                           
      });
    }
};

$(document).ready(function() {
  example.init();
});
于 2012-05-02T16:44:59.563 回答
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();)
于 2012-05-02T16:50:38.317 回答
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/

于 2012-05-02T17:03:08.180 回答
-1

对不起,我误解了这个问题。


有几种方法可以处理这个问题:

  1. 将调用包装在一个函数中:

    $('a').click( function(){ example.open( $(this) ) } );
    

    哪里$(this)可以替换为您的参数列表

  2. 调用不同的事件创建函数,它将参数作为参数:

    $('a').bind( 'click', {yourvariable:yourvalue}, example.open );
    

    其中 open 需要一个名为的参数,您可以通过(在上面它是)event访问您的变量event.dataevent.data.yourvariable


错误和其他信息


但是,除非是 jQuery 对象,否则您element.text()将无法正常工作。element因此,您可以在将对象传递给函数之前或在函数接收到对象之后对其进行 jQueryify:

  1. jQuery传递的对象:

    function(){ example.open(this) } /* to */ function(){ example.open($(this)) }
    
  2. 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 '}'
于 2012-05-02T16:52:09.013 回答