события не регистрируются после генерации html с обратным вызовом $ .post - PullRequest
0 голосов
/ 10 марта 2009

У меня есть несколько флажков ввода, которые динамически генерируются в функции обратного вызова $.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 ]

2 голосов
/ 10 марта 2009

Проблема в том, что ваше утверждение:

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

не имеет никакого эффекта, потому что во время выполнения нет элементов, соответствующих $ ("input [name = foo]"), потому что обратный вызов $ .post () еще не произошел.

2 голосов
/ 10 марта 2009

Кроме того, если вам нужно определить хуки до того, как будет создан $ .post, посмотрите на использование LiveQuery , так как оно позволяет вам прослушивать любые новые элементы, которые соответствуют вашему селектору, и связывать их тоже.

1 голос
/ 10 марта 2009

сразу после публикации этого вопроса, я попытался поместить .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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...