0

使用以下代码动态加载内容时出现问题。

$(document).ready(function() {
             $("#tags").keyup(function(){
                        var q = $(this).val(); 
                        $.ajax({ 
                            url: '/AnswerMedia/utilities/autoSearch/model/suggest.php?q='+q, 
                            success: function (data) {
                                $("#ajaxDiv").html(data); 

                            },
                            error: function (request, status, error) {
                            alert(request.responseText);
                        }
                    });  
            });
        });  

内容加载后,此代码旨在在单击加载的 div 标签之一时触发事件,但没有。

$(".pdiv").click(function(){
    var val = $(this).text();
    $('#tags').val(val);
    $('.mncontr').hide();
});
$("#closeSearch").click(function(){
    $('.mncontr').hide();   
});

然后我尝试了以下代码:

$("body").delegate(".pdiv", "click", function(){
    var val = $(this).text();
    $('#tags').val(val);
    $('.mncontr').hide();
});
$("body").delegate("#closeSearch", "click", function(){
    $('.mncontr').hide();   
});

它在 Firefox 中运行良好,但在 Chrome 中问题仍然存在。请帮我。

4

1 回答 1

0

这个SO 帖子:

如果您希望点击处理程序适用于动态加载的元素,那么您将事件处理程序设置在父对象上(不会动态加载)并为其提供与您的动态对象匹配的选择器,如下所示:

$('#parent').on("click", "#child", function() {});

事件处理程序将附加到#parent 对象,并且任何时候出现源自#child 的点击事件,它都会触发您的点击处理程序。这称为委托事件处理(事件处理委托给父对象)。

这样做是因为即使 #child 对象尚不存在,您也可以将事件附加到 #parent 对象,但是当它稍后存在并被点击时,click 事件将冒泡到 #parent 对象,它会看到它起源于#child,并且有一个事件处理程序用于单击#child 并触发您的事件。

于 2013-08-17T20:55:16.557 回答