【问题标题】:calling user defined function with params使用参数调用用户定义的函数
【发布时间】:2011-03-21 22:01:19
【问题描述】:

我正在定义函数 func1(); 我希望它接受一些参数,即

var func1(aaa, bbb){
//do something, anything!
};

然后我想稍后在文档中这样称呼它:

$('#some_id').click(func1($this));

但它不起作用。

我已经搞砸了一段时间,但至少对我来说,jquery/javascript 处理用户定义函数的方式非常奇怪。 some1 可以为我提供简单的代码 sn-p 吗?谢谢

【问题讨论】:

标签: jquery function


【解决方案1】:

如果您只想传递$(this),则不需要该参数,因为它可以在定义的函数中使用。

$('#some_id').click(func1);

但是,你不能像这样添加参数:

$('#some_id').click(func1(param1, param2));

然后,对于您的函数定义,您只需

function func1() { }

如果您确实需要 $(this) 以外的参数,则需要执行以下操作:

$('#some_id').click(function () {
    func1(aaa, bbb); });

【讨论】:

  • 当你这样调用func1时,this的值不会引用元素。
  • @patrick,我希望你不是指$('#some_id').click(func1);,因为它确实如此......
  • @Reigel - 我应该更清楚。当我说“像那样调用func1”时,我的意思是在上一个示例中从匿名函数内部调用它。我认为第一个例子是 passing func1.
  • 它确实有效,我在我的一个项目中使用它。尝试放置名称、类、id 等属性,然后尝试通过$(this).attr('name') 在函数中访问它,我保证它会起作用。编辑:我明白你的回答是什么意思。我认为我们中的任何人都不知道张贴者想要做什么,但我敢打赌他想传递元素属性,因为实际上没有其他任何东西可以传递,因为他可以直接访问变量。
  • 需要明确的是,this 不会引用给出的 last 示例中接收事件的元素。它会在第一个。
【解决方案2】:

我假设您正在尝试确保 this 仍然引用接收事件的元素。

试试看:http://jsfiddle.net/jKM9s/

$('#some_id').click(function() {
    func1.call(this, 'somearg', 'somearg'); 
});

   // now "this" references the element when func1 is called
function func1(aaa, bbb){
    //do something, anything!
};

编辑:

如果您只想引用被点击的元素,那么请参阅 @phoffer's 第一个解决方案。

【讨论】:

  • 我同意这仅取决于 OP 打算做什么。不幸的是,他似乎忘记了回来。
  • @phoffer - 是的,这种情况经常发生。一群热心帮忙的人,却没有互动。可能不习惯这么快就得到答案。
  • 你完全正确。如果我提出问题,我会尝试确保接下来的一个小时我有空,只是为了互动。当每个人一起工作时,这个网站就非常棒了。
  • 我很抱歉。我不习惯快速回复,下次我会提出问题并密切关注线程。感谢您的帮助;)
  • @GoTTimw - 没问题。 :o) 这是一个非常独特的网站。您通常会在几分钟内得到答案。
【解决方案3】:

应该是

function func1(aaa, bbb)  { ... }

【讨论】:

    【解决方案4】:

    这是一个简单的例子:

    确保使用function 定义您的函数。然后当你想从 jQuery 中调用它时,you should use an inline function within click().

    <div>Click Me!</div>
    <div>Pick this one!</div>
    <script type="text/javascript">   
    function func1(aaa, bbb) 
    { 
        alert('You clicked the DIV that said: "' + aaa.innerHTML + '" and ' + bbb); 
    };          
    $('div').click(function ()
    {
        func1(this, "that's ok.");
    });
    </script>        
    

    【讨论】:

      【解决方案5】:

      在 Javascript 中,您不能同时分配函数和传递参数。使用匿名函数...

      $('#some_id').click(function() {
        var arg1 = $(this);
        var arg2 = 'whatever';
      
        return func1(arg1, arg2);
      });
      

      如果您需要的唯一参数是this,请分配函数引用...

      $('#some_id').click(func1);
      

      【讨论】:

      • 我不知道那里的回报最好的用途是什么......我猜是返回真还是假?
      • 返回false 取消点击事件。当您需要进行验证(防止重定向)时很有用。
      【解决方案6】:

      由于.click(handler(eventObject)) 的定义,您不能像$('#some_id').click(func1($this)); 那样做...如果您确实这样称呼它,func1($this) 中的$this 将被视为eventObject

      为此,您可以使用.bind()event.data

      demo

      例如..

      function sum(event) {
         alert(event.data.x + event.data.y);
         // `this` here would refer to the element calling this function
         // for example, $(this).attr('id') would return `someID` if called below
      }
      

      称之为

      $('#someID').bind('click',{x:4, y:5}, sum);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多