JQuery эффект парения не работает

У меня есть динамически сгенерированные теги div, которые выглядят примерно так:

<div class="widget widget_1">
    <div class="widget_header widget_header_1"></div>
    <div class="widget_sub_header widget_sub_header_1"></div>
    <div class="widget_content widget_content_1"></div>
    <div class="widget_footer widget_footer_1"></div>
<div>

<div class="widget widget_1">
    <div class="widget_header widget_header_1"></div>
    <div class="widget_sub_header widget_sub_header_1"></div>
    <div class="widget_content widget_content_1"></div>
    <div class="widget_footer widget_footer_1"></div>
<div>

<div class="widget widget_6">
    <div class="widget_header widget_header_6"></div>
    <div class="widget_sub_header widget_sub_header_6"></div>
    <div class="widget_content widget_content_6"></div>
    <div class="widget_footer widget_footer_6"></div>
<div>

Эти вкладки DIV будут создаваться на основе выбора пользователя, поэтому я не могу знать, сколько их будет на экране одновременно, все, что я буду знать, это то, что у них может быть много одинаковых виджетов на экране и / или различие при включении экран сразу.

Я пытаюсь получить эффект наведения при наведении на любой из этих виджетов. Я попробовал следующее, но ничего не происходит при наведении .widget,

$(".widget_content").on({
    mouseenter: function () {
        alert("enter");
    },
    mouseleave: function () {
        alert("leave");
    }
});

Есть идеи, что я делаю не так?

4 ответа

Решение

Если элементы добавляются динамически, используйте подход делегированных событий:

$("body").on({
    mouseenter: function() {
        alert("enter");
    },
    mouseleave: function() {
        alert("leave");
    }
}, ".widget_content");

Здесь вместо body Вы можете использовать любой статический родительский элемент .widget_content,

Рабочая демонстрация http://jsfiddle.net/Ex3M6/

Попробуй в $(document).ready(function() {

Покойся с надеждой, что это соответствует твоему делу :)

Код

$(document).ready(function() {
    $(".widget_content").on({
        mouseenter: function() {
            alert("enter");
        },
        mouseleave: function() {
            alert("leave");
        }
    });

});​

Добавьте текст в ваши теги div в противном случае поверх того, что вы наводите мышью, и вашего контейнера. div теги также должны иметь закрывающие теги правильно (т.е. </div>).

<div class="widget widget_1">
    <div class="widget_header widget_header_1">dfsdfsdf</div>
    <div class="widget_sub_header widget_sub_header_1">sdfsdf</div>
    <div class="widget_content widget_content_1">sdfsdf</div>
    <div class="widget_footer widget_footer_1">sdfsdfsdf</div>
</div>

<div class="widget widget_1">
    <div class="widget_header widget_header_1">sdfsdf</div>
    <div class="widget_sub_header widget_sub_header_1">ggggg</div>
    <div class="widget_content widget_content_1">aaaaa</div>
    <div class="widget_footer widget_footer_1">ssss</div>
</div>

<div class="widget widget_6">
    <div class="widget_header widget_header_6">sssss</div>
    <div class="widget_sub_header widget_sub_header_6">fgggg</div>
    <div class="widget_content widget_content_6">fdff</div>
    <div class="widget_footer widget_footer_6">dfgdfgdfg</div>
</div>

Ваш код JQuery работает после этого изменения,

<script language="javascript" type="text/javascript" src="jquery-1.8.2.js"></script>
<script language="javascript" type="text/javascript">

    $(document).ready(function() {
        $("div[class^='widget_content']").on({
        mouseenter: function () {
            alert("enter");
        },
        mouseleave: function () {
            alert("leave");
        }
        });

});                

</script>

Использовать этот:

$(".widget_content").hover(
function () {
alert("enter");
},
function () {
alert("leave");
}
);
Другие вопросы по тегам