2014-02-19 2 views
2

У меня есть несколькоbuttons, вызывающий функцию на click event. В этой функции я связываю change event управления Radio Button с некоторыми динамическими параметрами. Я могу привязать событие изменения к управлению ящиком. Но не в состоянии получить значения параметров.Как передать динамические параметры на событие изменения переключателя

function ButtonClickFunction(one, two) { 

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

     console.log(one); // shows a radio button object 
     console.log(two); // gives undefined 
    }); 
} 

То, что я получаю в консоли, является объектом переключателя и неопределенным. Я уверен, что я делаю что-то неправильно, но не знаю, что? Любая помощь будет оценена.

Обновление: У меня есть несколько кнопок, призывающих тот же function, используя ответы, данные значения получают в два раза. Я имею в виду, что я получаю несколько значений.

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

Вы не можете просто выбрать, какие параметры для перейдите в эту анонимную функцию ... он уже установил параметры. Просто оставьте эти параметры, и этот обработчик должен иметь доступ к этим переменным уже с тех пор, как они привязаны к этой функции, создавая обработчик. – tymeJV

+0

что вы отчаянно хотите сделать? –

+0

Это может помочь: [.change()] (http://api.jquery.com/change/) – Fabricio

ответ

0

хорошо, чтобы быть ясно, когда вы звоните ButtonClickFunction что он делает регистрирует новый обработчик события щелчка, поэтому при нажатии несколько раз обработчиков получить сложенные, и выполняются. Следовательно, в первый раз только один обработчик, второй раз два обработчика и так далее.

Уловка, просто потянув, что регистрация обработчика из функции или отключить креплениями перед тем зарегистрировать новый обработчик как

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

надеюсь, что это имеет смысл

0

Анонимная функция имеет event в качестве первого параметра по умолчанию, следовательно, почему ваше протоколирование one возвращает объект. Если вы хотите получить доступ к переменным one и two родительской функции, просто оставьте параметры от анонимной функции, и у вас уже будет доступ из-за того, как они охвачены областью.

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! 
    }); 
} 
+0

Немного обновление в вопросе, пожалуйста, проверьте. –

0

Попробуйте это:

function ButtonClickFunction(one, two) { 

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

     console.log(one); 
     console.log(two); 
    }); 
} 

По словам других, функции обработки имеет свои предопределенные параметры. Пожалуйста, прочитайте документы для .change()

Кроме того, ваш код показывает объект переключателя для one, потому что первым ожидаемым параметром для этой функции обработчика является объект, который изменился (ваш переключатель). two показывает undefined, поскольку обработчик ожидает только один или отсутствие параметров, что делает второй параметр неопределенным.

+0

Немного обновление в вопросе, пожалуйста, проверьте. –

2

Вы должны использовать 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); 
    }); 
} 
+0

Немного обновление в вопросе, пожалуйста, проверьте. –

+0

@RajeshDhiman Это отвечает на вопрос, но для обновления :: обработчик событий регистрируется несколько раз, так как вы вызываете 'ButtonClickFunction()' для каждого клика, поэтому значения умножаются. 'on' должен делать трюк. –

+0

@ code-jaff Извините, но что, если есть одна кнопка, и я нажимаю несколько раз только на нее. Это также будет делать то же самое, я имею в виду множественные привязки событий. Так что это ответ, но не очень хороший. –

Смежные вопросы