2013-08-12 4 views
4

Я пытаюсь вырезать повторяющийся код в JQUERY, но не могу понять, как вызвать функцию из функции «on-> click».Вызовите мою функцию из JQUERY при нажатии

Моя функция выглядит следующим образом:

function myCheckAll(div, closer, finder){ 
    console.log(div+closer+finder); 

     $(div).closest(closer).find(finder).prop('checked', this.checked); 
    } 

И я пытаюсь вызвать его с чем-то вроде этого

$("#check_all_0").on('click', myCheckAll("#check_all_0", "table", "input#val0")); 

Моя проблема заключается она не работает. Что я не понимаю:

1) Я определяю функцию вне скобок, готовых к документу. Это где я должен это определить?

2) Журнал консоли вызывается, как только я загружаю страницу. Без щелчка цели, и она не вызывает функцию, если я нажимаю на цель.

Я новичок в jquery и, вероятно, делаю что-то совершенно неправильное, но буду признателен за любую помощь. Благодарю.

+0

'' input # val0 "' не делайте этого. Измените на '' # val0 '' другой способ медленнее и избыточен. – cgTag

+0

, если 'finder' является идентификатором DOM, для всех остальных jQuery нет необходимости. – cgTag

+0

Finder в этом случае теперь будет # val0, какой jQuery я мог бы вырезать? – jacobduron

ответ

2
$("#check_all_0").on('click', myCheckAll("#check_all_0", "table", "input#val0")); 

Это приведет в получении myCheckAll первый называется, и результат передается в качестве обработчика событий в JQuery. Вы должны обернуть его функции:

$("#check_all_0").on('click', function() { 
    myCheckAll("#check_all_0", "table", "input#val0")); 
}) 

см Также documentation

+1

+1 для добавления объяснения ошибки и ссылки на источник. –

3

Вы можете использовать замыкание:

$("#check_all_0").on('click', function() { 
    myCheckAll("#check_all_0", "table", "input#val0"); 
}); 
0

Хотя другие ответы работают, я верю, что вы ищете что-то вроде этого:

$("input").on('click', {name: 'me'}, func); 

function func(event) { 
    console.log(event.data.name); 
} 

Адаптировано для вашего кода:

$("#check_all_0").on('click', {div: "#check_all_0", closer: "table", finder: "input#val0"}, myCheckAll); 

function myCheckAll(event){ 
    console.log(event.data.div); 
    console.log(event.data.closer); 
    console.log(event.data.finder); 
    $(event.data.div).closest(event.data.closer).find(avent.data.finder).prop('checked', this.checked); 
} 

Демо: http://jsfiddle.net/nabil_kadimi/sdMQ2/

0

Я не уверен, что вы пытаетесь сделать, но это выглядит как проверка все функции и в то время как это не ответ на ваш вопрос. Это может помочь.

$('#check_all_0').on('click',function(e){ 
    $(this).closest('table').find(':checkbox').prop('checked',$(this).prop('checked')); 
}); 

Не видя HTML это невозможно знать, если это правильно, но вы используете идентификаторы DOM найти вещи, когда, возможно, это не самый лучший способ.

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