2010-11-16 2 views
3

Когда я нажимаю элемент управления с идентификатором Button1, он вызывает функцию, называемую getMakes, я хочу передать ей параметр. В этом случае идентификатор элемента управления, который будет принимать данные. Что я делаю не так?функция вызова с параметром в jQuery

$(function() { 

     $('#Button1').click(getMakes("'#output'")) 
     $('#buttonClear').click(function() { 
      $('#output').html(''); 
     }); 
}); 
function getMakes(myVar) { 
$.ajax({ 
    type: "POST", 
    url: "WebService.asmx/dbAccess2", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function (msg) { 
     var response = msg.d; 
     $.each(response, function (index, value) { 
      $(myVar).append(new Option(value, index)); 
     }); 
    }, 
    failure: function (msg) { 
     alert('failure'); 
    } 
}); 

}

ответ

5

OJ и Jacob имеют правильное решение, но они не объяснили, почему. Ваш код,

$('#Button1').click(getMakes("'#output'")) 

Передает возвращаемое значение getMakes кликать. Фактически вы вызываете функцию справа и там (когда эта строка выполняется, а не когда пользователь нажимает ее). Это не то, что вы хотите, вы действительно хотите вызвать функцию в событии click с аргументом. Для этого вам нужно вызвать функцию без параметров, которая, в свою очередь, вызывает вашу функцию с вашими аргументами. Самый простой способ сделать это - анонимная функция, как и другие.

Также обратите внимание, что в вашей строке кода есть некоторые дополнительные отметки кавычек и отсутствует полуколония. Не уверен, что это было намеренно.

4

Простой:

$('#Button1').click(function() { 
    getMakes('#output'); 
}); 
+2

ах это всегда есть, не так ли? –

+0

@nick Действительно. :) –

0

Вместо

$('#Button1').click(getMakes("'#output'")) 

.. (обратите внимание, что вы не нашли точку с запятой в конце) .. Делайте это:

$('#Button1').click(function() { getMakes("'#output'"); }); 
Смежные вопросы