Как изменить вызывающую функцию события onChange с помощью jQuery - PullRequest
2 голосов
/ 29 марта 2012

У меня есть этот код, который может отображать выпадающий в теге HTML HTML. В этом я установил одну функцию "hello ()" для этого выпадающего через jquery, но проблема в том, что она не вызывает эту функцию.

<body>
<div id="content"></div>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">

    $("#content").append('<select id="sel" onchange="fly()"><option value="1">Choose Me</option></select>');
    $("#sel").attr("onchange", "hello()");
    alert($("#sel").attr("onchange"));

    function hello() {
        alert("Hello");
    }

    function fly() {
        alert("Go to fly");
    }
</script>
</body>

Ответы [ 7 ]

4 голосов
/ 29 марта 2012

Вам нужно это.

$("#sel").change(hello);
1 голос
/ 29 марта 2012
$("#sel").attr("onchange", hello);

РЕДАКТИРОВАТЬ:

Если вы пропустили его во всех почти идентичных ответах, ваша первоначальная проблема заключалась в том, что вы помещали свою функцию в кавычки "hello()", а не просто использовали имя функции для вызоваэто (то есть hello) ...

0 голосов
/ 29 марта 2012

Я не могу комментировать, но, как сказали другие.проблема в том, что вы используете $("#sel").attr("onchange", "hello()"); вместо $("#sel").attr("onchange", hello);

Это связано с тем, что в JavaScript функция является типом данных.Так что вам нужно работать с функциями высокого порядка

Если вы хотите лучше понять это, я бы посоветовал узнать о функциональном программировании.

Кроме того, вы должны использоватьМетоды jQuery для добавления прослушивателей событий.В этом случае $(.'#sel').change(hello);

0 голосов
/ 29 марта 2012

Вы используете JQuery. Есть ярлык для большинства вещей. Должно быть:

var hello = function() {
   alert("Hello");
}
$("#sel").change(hello);

или

$("#sel").change(function() {
 alert("Hello");
});

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

$(document).ready(function() {
   // code here
});
0 голосов
/ 29 марта 2012

Я бы посоветовал вам переместить:

$("#content").append('<select id="sel" onchange="fly()"><option value="1">Choose Me</option></select>'); 
$("#sel").attr("onchange", "hello()"); 
alert($("#sel").attr("onchange"));

в функцию готовности документа и удалить " s вокруг hello, например, так:

$(document).ready(function() {
    $("#content").append('<select id="sel" onchange="fly()"><option value="1">Choose Me</option></select>'); 
    $("#sel").attr("onchange", hello); 
    alert($("#sel").attr("onchange"));
});

Это будетразрешите загрузку страницы, а затем измените атрибут.

0 голосов
/ 29 марта 2012

Используйте .change () :

$("#sel").change(function(){
   hello();
});

Также включите его в функцию инициализации jquery, чтобы убедиться, что он запускается после полной загрузки DOM:

$(function(){
   $("#content").append('<select id="sel" onchange="fly()"><option value="1">Choose Me</option></select>')
   $("#sel").change(function(){
      hello();
   });
});
0 голосов
/ 29 марта 2012

Вам просто нужно обернуть его в инициализацию jquery

$(function(){
    $("#content").append('<select id="sel" onchange="fly()"><option value="1">Choose Me</option></select>');
    $("#sel").attr("onchange", "hello()");
    alert($("#sel").attr("onchange"));

    function hello() {
        alert("Hello");
    }

    function fly() {
        alert("Go to fly");
    }
}); 
...