如何使用jQuery更改onChange事件的调用函数

时间:2012-03-29 15:47:14

标签: javascript jquery onchange

我有这个代码可以在html的div标签中显示下拉列表。在这个我已经设置了一个函数“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 个答案:

答案 0 :(得分:4)

你需要这个。

$("#sel").change(hello);

答案 1 :(得分:1)

$("#sel").attr("onchange", hello);

编辑:

如果你在所有几乎相同的答案中错过了它,你原来的问题是你把你的函数放在引号"hello()"而不是仅使用函数名来调用它(即hello) ...

答案 2 :(得分:0)

您只需将其包装在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");
    }
}); 

答案 3 :(得分:0)

使用.change()

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

还将它包装在jquery init函数中,以确保在DOM完全加载后运行它:

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

答案 4 :(得分:0)

我建议你搬家:

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

进入文档就绪函数并删除"周围的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"));
});

这将允许加载页面,然后更改属性。

答案 5 :(得分:0)

你正在使用jQuery。大多数事情都有捷径。它应该是:

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

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

它也应该在文档就绪功能中。这样就不会在元素存在之前尝试附加事件。

$(document).ready(function() {
   // code here
});

答案 6 :(得分:0)

我无法评论,但正如其他人所说。问题在于您使用的是$("#sel").attr("onchange", "hello()");而不是$("#sel").attr("onchange", hello);

这是因为在JavaScript中,函数是一种数据类型。所以你必须使用high order functions

如果你想更好地理解这一点,我建议学习函数式编程。

除此之外,您应该使用jQuery方法添加事件侦听器。在这种情况下$(.'#sel').change(hello);