jQuery没有处理加载的内容

时间:2013-01-07 05:54:02

标签: php javascript jquery css3

我正在一个网站上,当用户点击菜单上的选项时,内容会将自身(通过Ajax调用)加载到显示在屏幕中心的div框中。我遇到的问题是我无法弄清楚为什么没有任何javascript / jquery代码似乎适用于任何加载的内容。我需要重新声明加载内容本身中的所有javascript和jquery文件才能运行。

基本上,用户点击菜单中的“用户列表”:

    $('#users_list').live("click", function(event) {
    event.preventDefault();
    $('.prompt_content').load('users.php?page=1', function() {
        showprompt();
    });
    });

然后div屏幕出现在屏幕中央,显示所有用户名和一个小头像。当用户将光标悬停在用户信息框上时,我正在尝试更改用户信息框的背景颜色。

$('.user_info').hover(function() {
    $(this).prev('td').css("background-color", "#F0F0F0");
    $(this).css("background-color", "#F0F0F0");
}, 
function() {
    $(this).prev('td').css("background-color", "white");
    $(this).css("background-color", "white");
});

$('.user_avatar').hover(function() {
    $(this).next('td').css("background-color", "#F0F0F0");
    $(this).css("background-color", "#F0F0F0");
}, 
function() {
    $(this).next('td').css("background-color", "white");
    $(this).css("background-color", "white");
});

如果我重新填写我正在加载内容的页面顶部的jquery链接,这似乎才有效。

这是标记(借用内联css,它只是用于调试):

<table>
    <tr>
        <td style="padding: 10px;" class="user_avatar" id="user_10">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_10">Dave Gilbert
        </td>
        <td style="padding: 10px;" class="user_avatar" id="user_15">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_15">Norman De luca
        </td>
    </tr>
    <tr>
        <td style="padding: 10px;" class="user_avatar" id="user_24">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_24">Test user 1
        </td>
        <td style="padding: 10px;" class="user_avatar" id="user_17">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_17">Test user 2
        </td>
    </tr>
    <tr>
        <td style="padding: 10px;" class="user_avatar" id="user_21">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_21">Test user 3<br />
        </td>
        <td style="padding: 10px;" class="user_avatar" id="user_18">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_18">Test user 4
        </td>
    </tr>
    <tr>
        <td style="padding: 10px;" class="user_avatar" id="user_22">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_22">Test user 5
        </td>
        <td style="padding: 10px;" class="user_avatar" id="user_16">
            <img src="images/noavatar.jpg">
        </td>
        <td style="padding: 10px; word-wrap: break-word;" class="user_info" id="user_16">Leonard Klein
        </td>
    </tr>
</table>

2 个答案:

答案 0 :(得分:1)

因为它在dom中不可用而你直接访问动态内容的.hover(),你必须使用.on()处理程序:

$(document).on('hover', '.user_info', function() {
   $(this).prev('td').css("background-color", "#F0F0F0");
   $(this).css("background-color", "#F0F0F0");
},function() {
   $(this).prev('td').css("background-color", "white");
   $(this).css("background-color", "white");
});

Instead using $(document)您可以使用最近的父级现有div或任何元素,如:

$('.prompt_content').on('hover', '.user_info', function() {
   $(this).prev('td').css("background-color", "#F0F0F0");
   $(this).css("background-color", "#F0F0F0");
},function() {
   $(this).prev('td').css("background-color", "white");
   $(this).css("background-color", "white");
});

答案 1 :(得分:1)

问题是您在添加动态元素之前附加事件,因此它们不受影响。要解决这个问题,你必须做这样的事情:

// attach to the closest parent element that is on the loaded page (not ajax)
$("body").on({ 
    mouseenter: function () {
        $(this).prev('td').css("background-color", "#F0F0F0");
        $(this).css("background-color", "#F0F0F0");
    },
    mouseleave: function () {
        $(this).prev('td').css("background-color", "white");
        $(this).css("background-color", "white");
    }
}, '.user_info'); // <- selector here