Javascript 如何将动态参数传递给单选按钮更改事件

Javascript 如何将动态参数传递给单选按钮更改事件,javascript,jquery,Javascript,Jquery,我有多个按钮,它在单击事件上调用函数。在该函数中,我使用一些动态参数绑定单选按钮控件的更改事件。我能够将更改事件绑定到无线电波盒控件。但无法获取参数值 function ButtonClickFunction(one, two) { $('input[type = "radio"]').change(function (one, two) { console.log(one); // shows a radio button object consol

我有多个
按钮
,它在
单击事件
上调用函数。在该函数中,我使用一些动态参数绑定
单选按钮
控件的
更改事件
。我能够将更改事件绑定到无线电波盒控件。但无法获取参数值

function ButtonClickFunction(one, two) {

    $('input[type = "radio"]').change(function (one, two) {

        console.log(one); // shows a radio button object
        console.log(two); // gives undefined
    });
}
我在控制台中得到的是单选按钮对象,未定义。我肯定我做错了什么,但不知道是什么?任何帮助都将不胜感激

更新:我有多个按钮调用相同的
函数
使用给定的答案值会加倍。我的意思是我得到了多个值

eg: Passing some integer as variables:
on first button click got 1,2.
and then on second button click got 1,2,3,4.

默认情况下,匿名函数的第一个参数是
事件
,因此,记录
事件
会返回对象。如果希望访问父函数的
一个
两个
变量,只需将参数从匿名函数中去掉,就可以访问它们,因为它们的作用域是如何确定的

function ButtonClickFunction(one, two) {
    //EVERYTHING INSIDE THIS FUNCTION HAS ACCESS TO "ONE" AND "TWO
    //INCLUDING YOUR CHANGE EVENT
    $('input[type = "radio"]').change(function (e) {
        //you have access!
    });
}
试试这个:

function ButtonClickFunction(one, two) {

    $('input[type = "radio"]').change(function () {

        console.log(one);
        console.log(two);
    });
}
正如其他人所说,处理函数有其预定义的参数。请仔细阅读这些文件

此外,您的代码为
one
显示一个单选按钮对象,因为该处理程序函数的第一个预期参数是已更改的对象(您的单选按钮)
two
显示undefined,因为处理程序只需要一个或没有参数,因此使第二个参数未定义。

您应该使用
on()
,然后使用第二个参数将附加信息传递给处理程序函数:

$('input[type= "radio"]').on('change', { 'one': one, 'two': two }, function (e) {
    console.log(e.data.one);
    console.log(e.data.two);
});
话虽如此,您应该能够在回调中访问它们,只是不要将它们传递给它:

function ButtonClickFunction(one, two) 
{
    $('input[type="radio"]').change(function () {
        console.log(one);
        console.log(two);
    });
}

好的,需要明确的是,当您调用
ButtonClickFunction
时,它所做的是为click事件注册一个新的处理程序,因此,当您多次单击时,处理程序将堆叠并执行。因此,第一次只有一个处理程序,第二次只有两个处理程序,依此类推

诀窍是,在注册新的处理程序之前,只需将该处理程序注册从函数中取出或从绑定中取出,就像

function ButtonClickFunction(one, two) 
{
    $('input[type= "radio"]').off('change').on('change', function (e) {
        console.log(one);
        console.log(two);
    });
}

希望这有意义

您不能只选择要传递给匿名函数的参数……它已经设置了参数。只需去掉这些参数,处理程序就应该可以访问这些变量,因为它们的作用域是创建处理程序的函数。您确实想做什么?这可能会有帮助:我想在单选按钮的更改事件中使用参数
1和2
。@RajeshDhiman这回答了这个问题,但是对于update::事件处理程序会多次注册,因为每次单击都会调用
ButtonClickFunction()
,因此值会成倍增加
on
应该可以代替。@code jaff很抱歉,但是如果只有一个按钮,而我只在上面单击了多次该怎么办。这也会做同样的事情,我指的是多个事件绑定。因此,这是一个答案,但不是一个好的答案。