Я создал документ jQuery, однако он не может захватить какой-либо элемент внутри только одного типа элементов, ".media_container"
Следующий код ведет себя следующим образом:
jQuery(document).ready(function($) {
alert('alive');
$('h1').css('background', 'pink');
$('.media_container').hover(function(){
$(this).css('display', 'none');
});
});
'alive'
предупрежден, поэтому я знаю, что файл читается правильно..media_container
становятся розовыми..media_containers
над любым .media_containers
У меня была такая же проблема с другим файлом jQuery на той же странице php. Я попробовал.mouseover и.mouseenter с тем же неответчиком.
Вопрос. С jQuery некоторые части документа недоступны с помощью $(), а недоступные части находятся только в одном типе элемента.media_container - любая идея относительно того, почему это так?
Я боролся с этим в течение нескольких дней, и, конечно, причина и решение кажутся легкими в ретроспективе. :)
Причина: jQuery действительно тонка относительно порядка и времени
В тот момент, когда скрипт запущен, страница выглядит следующим образом:
<html>
<head>
<script>
window.onload(){
loadContent(); //which uses ajax to inject php into the html
}
</script>
</head>
<body>
//empty
<script>
jQuery(document).ready(function(){
$('.media_container').someFunction();
});
</script>
</body>
</html>
$ (document).ready() происходит до window.onload()
Поэтому, несмотря на то, что сценарий jQuery находится в конце body
, он запускается до loadContent()
в head
который запускается window.onload()
.
Дальнейшая ясность, последовательность событий:
1. Browser reads html/php document, top down.
2. Browser reads the script in the 'head' and waits for 'window.onload()'
3. Simultaneously, it loads the 'html' elements into the DOM.
4. It reaches the end of the document and reads and loads a jQuery script and waits for 'jQuery(document).ready()'
5. Since it already basically done with loading the DOM, the jQuery script runs <i>before</i> the window.onload() script runs.
Решение: <img onload>
Даже запуск loadContent()
на document.ready()
вместо window.onload()
не работает, потому что к тому времени, когда он запускает ajax и использует php для вставки элементов в HTML, скрипт jQuery уже запущен.
Поэтому я сделал две вещи, чтобы ускорить код:
loadContent()
на document.ready()
media_container
с visibility:hidden
и <img src='spaceholder.jpg' onload='attachFunctions()'>
, где attachFunctions() определяется в файле сценария, запускаемом в head
и проблема решены!Новый код:
<html>
<head>
<script>
$(document).ready(function(){
loadContent(); //which uses ajax to inject php into the html
});
attachFunctions(){
$('.media_container').someFunction();
}
</script>
</head>
<body>
<div class='media_container'></div>
<div class='media_container'></div>
<div class='media_container'></div>
<div class='media_container' style='visibility:hidden'>
<img src='spaceholder.jpg' onload='attachFunctions()'>
</div>
</body>
</html>
.media_containers
или.media_container
?? покажи html