Передать параметр в пользовательскую функцию jQuery - PullRequest
2 голосов
/ 15 сентября 2010

Вот что у меня есть:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<script type="text/javascript" src="/js/jquery.js"></script>

 <script type="text/javascript"> 

$(document).ready(function() { 
    $("#weight").change(onSelectChange);
}); 

function onSelectChange(){
        var selected = $('#weight').val();
        $.post("tship.php", {weight: selected},
            function(data){
                $("#ship").html(data.ret_html);
                }, "json");
} 

 </script>   


</head>
<body>

<select id="weight">
  <option>1</option>
  <option>2</option>
  <option>3</option>
  <option>4</option>
</select>

<br />

<div id="ship">
</div>

</body>
</html>

Я хочу изменить это так, чтобы onSelectChange принимал один параметр. Мне нужно иметь возможность вызывать функцию и для других событий - не только при изменении значения поля выбора. Вот моя попытка, не работает:

<script type="text/javascript"> 

$(document).ready(function() { 
    $("#weight").change(onSelectChange($('#weight').val()));
}); 

function onSelectChange(parm){

        $.post("tship.php", {weight: parm},
            function(data){
                $("#ship").html(data.ret_password);
                }, "json");
} 

</script>

Ответы [ 4 ]

3 голосов
/ 15 сентября 2010

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

$("#weight").change(function(){
 onSelectChange($(this).val());
});
2 голосов
/ 15 сентября 2010

Вы должны добавить еще одну функцию:

$("#weight").change(function(){
      onSelectChange($('#weight').val());
}); //close the anonymous function

Обратите внимание, что в исходном коде вы передали onSelectChange как ссылку , вы не запустили его - onSelectChange(). Имея такой код, вы запускаете функцию один раз, а не связываете ее.

1 голос
/ 15 сентября 2010

Вы не можете этого сделать, onSelectChange вызывается функцией изменения jQuery, поэтому он выбирает, какие параметры передавать.

Однако в вашем случае это просто, jQuery свяжет 'this' с элементомк которому вы применили этот обработчик событий, чтобы вы могли ссылаться на это значение в onSelectChange, используя:

$(this).val();
1 голос
/ 15 сентября 2010

Вы вызывали функцию внутри другой функции, поэтому я думаю, что если вы измените свой код на следующий, он должен работать нормально (при условии, что ваша onSelectChange() функция работает правильно:

$(document).ready(function() { 
    $("#weight").change(
        function() {
            $(this).onSelectChange($('#weight').val()));
        }
    );
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...