Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   jquery перед загрузкой библиотеки (https://javascript.ru/forum/misc/40564-jquery-pered-zagruzkojj-biblioteki.html)

Toki 11.08.2013 03:13

jquery перед загрузкой библиотеки
 
Есть элементарный спойлер, но jquery подключается в конце страницы, так(естественно не работает):
<html>
<head>
<script>
jQuery(document).ready(function(){
	jQuery('.spoiler-content').hide()

	jQuery('.spoiler').click(function(){
		jQuery(this).toggleClass("close").toggleClass("open").next().toggle()
	})
})
</script>
</head>
<body>
...
<script type="text/javascript" src="jquery.js"></script>
</body>
</html>

Если подключить jquery в <head>, то всё гут. Как переделать спойлер так, чтобы работало независимо от того, где подключен jquery

ruslan_mart 11.08.2013 05:43

window.onload = function() {
    $('.spoiler-content').hide()
 
    $('.spoiler').click(function(){
        $(this).toggleClass("close").toggleClass("open").next().toggle()
    })
}

danik.js 11.08.2013 09:28

Toki, опусти скрипт спойлера ниже скрипта jQuery. Это элементарно, не?

Toki 11.08.2013 15:44

Цитата:

Сообщение от Ruslan_xDD (Сообщение 266900)
window.onload = function() {
    $('.spoiler-content').hide()
 
    $('.spoiler').click(function(){
        $(this).toggleClass("close").toggleClass("open").next().toggle()
    })
}

Не работает. В консоле ошибок нет. Спойлер просто всегда открыт.

danik.js
С удовольствием бы, но нельзя.

ruslan_mart 11.08.2013 15:46

window.addEventListener('DOMContentLoaded', function() {
    $('.spoiler-content').hide()
 
    $('.spoiler').click(function(){
        $(this).toggleClass("close").toggleClass("open").next().toggle();
    })
});

Toki 11.08.2013 16:08

Ruslan_xDD, спасибо огромное, все работает :)

danik.js 11.08.2013 16:15

Не плохо бы проинформировать что способ не работает в IE8

Deff 11.08.2013 16:41

Toki,
:) Или поставить на класс <div class="spoiler-content" style="display:none"

danik.js 11.08.2013 17:33

Deff, и как это поможет?

Deff 11.08.2013 17:41

Цитата:

Сообщение от danik.js
Deff, и как это поможет?

Поможет скрыть спойлер на начальном этапе до подключения скрипта после DOMContentLoaded
При всяких слайдерах и больших фонах так и будет точать открытым

danik.js 11.08.2013 17:54

Все правильно. Пока средства (js код), позволяющие открыть спойлер не подгрузились гарантированно - спойлер пусть будет открытым.

рони 11.08.2013 18:10

Toki,
как вариант по таймеру проверять подгрузилось ли jQuery - если да таймер незапускать больше а нужный код проинициализировать

Deff 11.08.2013 18:12

:) Имхо, проще уж на тег
<html>
<head>
<style>
.spoiler-content {
 display:none;
}
.spoiler b{
  display:none;
  cursor:pointer;
  padding:13px;
  color:blue;
}
.spoiler.close b:first-child{
  display:block;
}
.spoiler.open b:last-child {
   display:block;
}
</style>
<script>
function myFunk(sel) {
$(sel).toggleClass("close").toggleClass("open").next().toggle()
}
</script>
</head>
<body>
<div class="spoiler close" onclick="myFunk(this)"><b>Открыть</b><b>Cкрыть</b></div>
<div class="spoiler-content">
Привет!<br/>
Привет!<br/>
Привет!<br/>

</div>
...


<script src="http://code.jquery.com/jquery-latest.js"></script>
</body>
</html>


Часовой пояс GMT +3, время: 00:27.