2015-04-07 4 views
0

я получаю содержание хотя AJAX, как:JQuery парить AJAX загружен контент не работает

<div class="nachricht" id="1"> 
    bla 
    <div class="detail" id="1" style="float: left; display: none;">hidden stuff</div> 
    <div class="spacer" style="clear: both;"></div> 
</div> 

и я хочу .details быть показано при наведении курсора мыши на .nachricht

поэтому я использую:

$(".nachricht").hover(function(){ 
    $(".detail", this).stop(true,true).delay(500).show(0); 
    }, function(){ 
    $(".detail", this).stop(true,true).delay(500).hide(0); 
}); 

Почему он не работает при загрузке, хотя AJAX и как я могу его решить?

EDIT:

Я получаю содержание от функций, как:

function loadfile(){ 
    $.ajax({ 
     type: 'post', 
     url: 'donachrichten.php', 
     data: {mach: "loadfile", kontaktfile: kontaktfile}, 
     success: function(data){ 
      $("#chatnow").html(data); 
     } 
    }); 
} 
+0

Простой ответ - элемент не существует при запуске кода. Показать ajax-код. Может помещать код в обратный вызов ajax, который вставляет html или конвертирует в делегированные события mousePoint mouseleave – charlietfl

ответ

1

Вы можете попробовать с помощью этого:

$("#chatnow").on('mouseenter', '.nachricht', function(event) { 
    $(".detail", this).stop(true,true).delay(500).show(0); 
}).on('mouseleave', '.nachricht', function(event) { 
    $(".detail", this).stop(true,true).delay(500).hide(0); 
}); 

объяснение

В .nachricht Элемент класса не существует, когда ваша страница загружена, вы не можете связать событие с несуществующим элементом. вместо этого следует использовать делегирование делегирования на элементе #chatnow.

Here are some more example of hover event delegation

+0

. Обратите внимание, что согласно docs 'on ('hover'' устарел – charlietfl

+0

Ваш обновленный код работает, спасибо: D – Bunghole

+0

PS: (событие) не нужно, это может быть просто() – Bunghole

1

Почему бы не справиться с показать/скрыть с помощью CSS вместо этого? Сначала удалите встроенные стили из div .detail, а затем добавьте это в таблицу стилей.

.detail {float:left;display:none} 
.nachricht:hover .detail {display:block;} 

В противном случае оберните начальную функцию наведения в функции.

function showDetails(){ 
$(".nachricht").hover(function(){ 
    $(".detail", this).stop(true,true).delay(500).show(0); 
}, function(){ 
    $(".detail", this).stop(true,true).delay(500).hide(0); 
}); 
} 

и называть его после того, как данные были загружены.

success: function(data){ 
     $("#chatnow").html(data); 
     showDetails(); 
    } 
+0

В CSS нет эффекта задержки (я думаю), но мне нравится ваше другое решение, хорошо знать, что он будет работать так же, я могу использовать его для других вещей – Bunghole

+0

Фактически есть и если вы использовали его в сочетании с свойством непрозрачности вместо отображения, он работал бы очень хорошо. Хотя это не так, как кросс-браузер, как ваш метод jquery. http://www.w3schools.com/cssref/css3_pr_transition -delay.asp – partypete25

Смежные вопросы