Я пытаюсь использовать prototype и scriptaculous, чтобы скрыть и отобразить элемент div, но функция (ниже) для использования свойства прототипа setStyle не работает, и я не уверен, в чем проблема.
<script type = "text/javascript" language = "javascript">
function bodyOnload() {
$('content1').setStyle({ display: 'none' });
$('content2').setStyle({ display: 'none' });
}
</script>
<script type = "text/javascript" language = "javascript">
var currentId = null;
Effect.Accordion = function (contentId) {
var slideDown = 0.5;
var slideUp = 0.5;
contentId = $(contentId);
if (currentId != contentId) {
if (currentId == null) {
new Effect.SlideDown(contentId, {duration: slideDown});
} else {
new Effect.SlideUp(currentId, {duration: slideUp});
new Effect.SlideDown(contentId, {duration: slideDown});
}
currentId = contentId;
} else {
new Effect.SlideUp(currentId, {duration: slideUp});
currentId = null;
}
};
</script>
Предыдущая функция вызывается как таковая:
<div id = "accordion">
<div id = "part1">
<div id = "nav1" onclick = "new Effect.Accordion('content1');">
Post a comment 1
</div>
<div id = "content1">
<form id = "form" name = "form" action = "post.php" method = "post">
<textarea name = "commentbody" cols = "20" rows = "10"></textarea>
<button type = "submit">Post Comment</button>
<input type = "hidden" name = "blogID" value = "1" />
<input type = "hidden" name = "userID" value = "3" />
<input type = "hidden" name = "parentID" value = "7" />
<div class = "spacer"></div></form>
</div>
</div>
<div id = "part2">
<div id = "nav2" onclick = "new Effect.Accordion('content2');">
Post a comment 2
</div>
<div id = "content2">
<form id = "form" name = "form" action = "post.php" method = "post">
<textarea name = "commentbody" cols = "20" rows = "10"></textarea>
<button type = "submit">Post Comment</button>
<input type = "hidden" name = "blogID" value = "1" />
<input type = "hidden" name = "userID" value = "3" />
<input type = "hidden" name = "parentID" value = "7" />
<div class = "spacer"></div></form>
</div>
</div>
</div>
Вот что происходит с кодом.





Если вы хотите изначально скрыть элементы, недостаточно написать функцию bodyOnload. Эту функцию следует вызывать при загрузке страницы, используя что-то вроде этого:
window.onload = bodyOnload;
И, конечно, советую попробовать jQuery :)
maxnk уже затронул основную проблему.
Но Prototype рекомендует использовать событие dom:loaded вместо window.onload:
document.observe("dom:loaded", bodyOnload);
Кроме того, вы можете попробовать Prototype Element#toggle или Element#hide вместо Element#setStyle (если предупреждение на каждой странице не относится к вашему CSS).
function bodyOnload() {
$('content1').hide();
$('content2').hide();
}
Большой! теперь он работает. Вы знаете, что это пример из книги, из которой я пытался извлечь уроки. Автор проигнорировал эту очень важную часть, так как он ошибочно сказал, что лучший способ ссылаться на библиотеку эффектов в scriptaculous выглядит так:
<script type = "text/javascript" src = "javascripts/prototype.js"></script>
<script type = "text/javascript" src = "javascripts/scriptaculous.js?load=effects"></script>
вместо как:
<script type = "text/javascript" src = "javascripts/prototype.js"></script>
<script type = "text/javascript" src = "javascripts/effects.js"></script>
У книги есть отличные отзывы на Amazon, но я не думаю, что кто-то из рецензентов пытался использовать книгу. Все они делают рецензии на объем, а не на содержание книги. Ни один из примеров, которые я пытался использовать в книге, не сработал. Я должен был понять это сам. Думаю, вы могли бы сказать, что мне нужно прочитать другие части книги, чтобы понять определенный пример, но для такой большой книги можно ли это сделать? Если мне нужно знать что-то, о чем упоминал ранее автор, не следует ли мне об этом напоминать, по крайней мере, с точки зрения книги настолько большой, что фактически является своего рода справочником? Если вам интересно: Аякс: полное руководство, Энтони Т. Холденер III
Обновлять: Автор использовал старую версию библиотек Scriptaculous и Prototype, поэтому возникло недоразумение. Если вы получите эту книгу, помните об этом. На самом деле я теперь глубоко уважаю эту книгу, хотя бы за ее сдвиговый объем.
Спасибо за эти приложения SlideUp и SlideDown.
Важное замечание: он не работает под ie7 и ie8, если вы не установите ширину для div, который хотите показать или скрыть.
Винсент
Ой, я просто не знал, как правильно это сделать в прототипе :( Теперь я знаю, спасибо!