Javascript:如何将参数传递给没有括号的被调用方法

时间:2012-05-02 16:41:31

标签: javascript methods arguments parentheses

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

所以我想我的问题是......你如何将一个参数传递给一个没有圆括号的函数?

非常感谢。

5 个答案:

答案 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)

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


有几种方法可以解决这个问题:

  1. 在函数中包含调用:

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

    $(this)可以用您的参数列表替换

  2. 调用另一个事件创建函数,它将参数作为参数:

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

    如果open有一个名为event的参数,您可以通过event.data访问您的变量(在上面它是event.data.yourvariable


  3. 错误和其他信息


    但是,除非element.text()是jQuery对象,否则element不会起作用。因此,您可以在将对象传递给函数之前,或者在函数接收到它之后对其进行jQueryify:

    1. jQuery 传递对象:

      function(){ example.open(this) } /* to */ function(){ example.open($(this)) }
      
    2. jQuery 收到对象:

      alert(element.text());           /* to */ alert($(element).text());
      
    3. 也就是说,当调用没有参数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 '}'