быть семантически и осмысленно выделенными именами ... мир вам с вами ... НО вы совершенно не правы.)

я есть 3 файла:

js_json.js -> для моего кода JSONjavascript.js -> для моей функции javascriptindex.php

Здесь код дляjs_json.js:

$(function(){
    $('#postTitle').change(function(){

        var title_id = $("#postTitle").val();


        $.ajax({
            type:"post",
            url:"proses.php",
            data:"title_id=" + title_id,
            dataType:"json",
            success:function(data){
                body="";
                //$.each(data, function(i,n){
                    //body = n['body'];    
                //});
                body += "<a href=\"javascript:void(0);\" id=\"pesan\" name="pesan" onClick=\"\">Hola Test</a>";
                $(".postBody").empty();
                $(".postBody").append(body);
            },
            error:function(data){
                $(".postBody").empty();
                $(".postBody").append("NO Post Selected.");
            }

        });
        return false;
    });
});

а вот мойjavascript.js код:

$(function (){
    $("a[name=pesan]").click(function (){
        alert("holalalalalal.....!");    
    });
});

а здесьindex.php код:

    //some code
    <body>
        <a href="javascript:void(0);" id="pesan" name="pesan">Hola Test 1</a>
        Posts : <br />
        <select name="title" id="postTitle">
            <option value="">Select Post...</option>
            <?php
                $sql = "SELECT id, title FROM posts ORDER BY title";
                $query = mysql_query($sql) or die(mysql_error());

                while($rows = mysql_fetch_array($query)){
                    print('<option value="' . $rows['id'] . '">' . $rows['title'] . '</option>');
                }
            ?>
        </select>
        <br />
        Body : <br />
        <div class="postBody">
            Will show the body of post.
        </div>
    </body>
</html>

и мой вопрос:

Когда я нажимаю ссылку «Hola Test 1», она работает, и появляется сообщение. Проблема в том, что после того, как я щелкнул по опции выбора, и появилась ссылка «Hola Test», а затем я щелкнул эту ссылку («Hola Test»), сообщение не появляется и в firebug нет ошибок ...

Может кто-нибудь объяснить мне, почему ...? Спасибо...

 Gabriele Petrioli30 мая 2011 г., 09:19
использование.live() как@ Matt ответили, но имейте в виду, что нельзя использовать один и тот же идентификатор на странице более одного раза (идентификаторы уникальны) и, скорее всего, вызовет другие проблемы в будущем ..
 Sindhu1330 мая 2011 г., 09:26
@gaby спасибо за совет ...

Ответы на вопрос(2)

Решение Вопроса

click() будет связывать событие только для элементов, которые существуют на странице в то времяclick называется (то же самое касаетсяon() без селектора,bind()и все остальные методы в ярлык-группе для связывания;keydown(), change() и т.д. ).

Потому что ваш другой элемент добавляется через AJAXнемного позжеобработчик не связан с этим.

использование.on() вместо этого с помощью селектора, который свяжет событие со всеми текущими и будущими элементами, подобранными селектором.

$(function (){
    $(document).on('click', 'a[name=pesan]', function () {
        alert("holalalalalal.....!");    
    });
});

посколькуon() был представлен в jQuery 1.7, если вы используете более ранние версии jQuery (например, те, которые существовали, когда задавался этот вопрос), вы можете использоватьlive() или жеdelegate() вместо вкл;

$(function (){
    $('a[name=pesan]').live('click', function () {
        alert("holalalalalal.....!");    
    });
});
 Loreto Gabawa Jr.16 окт. 2015 г., 17:59
Спасибо за это! Я застрял раньше, используя 'on' непосредственно к элементу, как: $ ("p") .on ('click', function () {}); любое объяснение почему? Я заметил, что Chrome выдает это предупреждение: синхронный XMLHttpRequest в основном потоке устарел из-за его пагубных последствий для конечного пользователя. Для получения дополнительной помощи, проверьтеxhr.spec.whatwg.org.
 Sindhu1330 мая 2011 г., 09:10
спасибо, это работает ... и спасибо за объяснение ... это то, что я искал ....

(потому что я не нашел упоминания об этом ни в одном из случаев «событий не стрелял», для которых я искал в Интернете) что есть возможность, которая может вас укусить.

Если вам случится использовать.Удалить() временно извлечь что-то из DOM, а затем снова вставить это, тогда вы потеряете свои события. То, что вам нужно использовать вместо этого.detach () сохранить данные и события после повторной вставки. Это может быть трудно отладить, поскольку все может выглядеть нормально, а инструменты отладки событий в лучшем случае отрывочны.

(Лично я бы назвал их чем-то вроде.detachAndScrubDataAndEvents () а также.detach (), поскольку я поклонник описательных имен, экономящих часы отладки. Для тех, кто находит.Удалить() а также.detach () быть семантически и осмысленно выделенными именами ... мир вам с вами ... НО вы совершенно не правы.)

Ваш ответ на вопрос