代码之家  ›  专栏  ›  技术社区  ›  helloandre

使用$.Post回调生成HTML后未注册的事件

  •  0
  • helloandre  · 技术社区  · 17 年前

    我有一些输入复选框是在 $.post 回调函数。然后我有一个 $().change() 调用在值更改时执行的操作(通知某些信息)。但是,对于动态生成的输入,.change()不起作用。还有一些其他的输入是可以工作的,它们被硬编码到HTML中,但是其他的输入则不行。

    这是密码。

    <html>
    <head>
        <script type="text/javascript" src="js/jquery.js"></script>
        <script>
        $(document).ready(function(){
            $("#hideme").hide();
            $.post("php/test.php",{},function(data){
                writeMe = "<input type='checkbox' name='foo' value='" + data + "'>" + data;
                $("#insert").html(writeMe);
            }, "json");
            $("input[name=foo]").change(function(){
                alert($(this).attr("value"));
            })
        });
        </script>
    
    </head>
    <body>
        <div id="insert"></div>
        <input type="checkbox" name='foo' value='world'>world
    </body>
    </html>
    

    php/test.php只是:

    echo json_encode("hello");
    
    3 回复  |  直到 17 年前
        1
  •  2
  •   slacy    17 年前

    问题是你的陈述:

    $("input[name=foo]").change(function(){
            alert($(this).attr("value"));
    })
    

    没有任何效果,因为在执行时,没有与$(“input[name=foo]”)匹配的元素,因为$.post()回调尚未发生。

        2
  •  2
  •   mheap    17 年前

    此外,如果您确实需要在$.Post发生之前定义钩子,请查看使用 LiveQuery ,因为它允许您监听与选择器匹配的任何新元素,并绑定它们。

        3
  •  1
  •   helloandre    17 年前

    在发布这个问题后,我立即尝试将.change()放入回调中,一切都很顺利。

    $.post("php/test.php",{},function(data){
        writeMe = "<input type='checkbox' name='foo' value='" + data + "'>" + data;
        $("#insert").html(writeMe);
    
        $("input[name=foo]").change(function(){
            alert($(this).attr("value"));
        });
    }, "json");