如何在 .click() 函数中传递参数?

8

我希望在以下情况下将参数传递给click()处理程序函数:

function edit_tab(val){
    var prev_tab = $("#current_tab").html();
    if (prev_tab == 1) {
        $('.edit-basic-info').click(a); // here I want to pass some argument "a".
    }
}

如何在上述代码中传递参数a?我尝试的方法不起作用。

8
请点击这里查看https://dev59.com/B3A75IYBdhLWcg3weZDu,同时这里的示例代码http://jsfiddle.net/GDGXA/将会更有帮助。该问题涉及如何使用jQuery的click()方法传递参数给用户定义的函数。 - Developer
2
我不认为这是一个重复的问题 - 其他问题询问如何传递附加参数到命名函数,而这个问题则是询问如何传递附加参数到事件处理程序。 - billyonecan
1
@billyonecan 我不明白为什么这不是一个重复的问题。两个问题都问如何将额外的参数传递给传递给.click()函数的函数(在这个问题中,函数名为'a',在原始问题中它被命名为'add_event')。 (还要注意,这个问题是由金徽章持有者关闭的,我更倾向于相信他们的意见,而不是你是否这是一个重复的问题) - cimmanon
同意,只是因为意图不同并不会抵消重复的状态。这两个问题都涉及如何在点击事件中传递自定义参数。这是一个重复的问题。 - rlemon
@billyonecan 如果你不打算将参数a传递给处理点击事件的函数,那么将参数a传递给点击事件有什么意义呢? - cimmanon
非常抱歉,这确实是一个重复的问题。再次看到它,我不知道为什么之前我认为它不是重复的。 - billyonecan
4个回答

9
你可以使用 trigger()extraParameters 传递额外的参数给你的处理函数:
来自 trigger() 文档:

extraParameters 类型:Array 或 PlainObject,传递给事件处理程序的其他参数。

示例(也来自文档):
$( "#foo" ).on( "custom", function( event, param1, param2 ) {
  alert( param1 + "\n" + param2 );
});

$( "#foo").trigger( "custom", [ "Custom", "Event" ] );

太好了!这对我有用,非常感谢你,你节省了我的时间 :) - Amrinder Singh

3

使用闭包:

function doSomething(myParam) {
    return function(event) {
        // Use both myParam and event here
    };
}

在你的事件处理程序中:

$('#foo').on('click', doSomething('parameter')); // Works fine

这种方法有效的原因是调用doSomething('parameter')返回一个函数,内部函数只有在点击处理程序调用它时才执行,并且可以使用从外部传递给它的所有参数。


但是在这里没有办法根据上下文传递参数的单独值。每次点击可能需要传递一个不同的参数值来决定事件处理程序如何处理事件。 - Sunny

-1
    <script>
    function edit_tab(val){
                var prev_tab=$("#current_tab").html();
                if(prev_tab==1){
                    $('.edit-basic-info').bind('click', function () {  
                       fndosomething(a)
//pass value in that function and use it

     });
                }
    }
    </script>

1
你能否扩展一下你的代码(编辑,而不是注释)?为什么你的解决方案会有效? - evolutionxbox

-1

你可以像这样再做一点点

var message = 'check'; 
$('button').click({msg: message},functionFoo);

function functionFoo(e){
 alert(e.data.msg);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接