#html #focus #toggle
#HTML #фокус #переключить
Вопрос:
У меня есть HTML, подобный этому:
<div id="navigation">
<ul>...</ul>
</div>
<div id="header-search">
<input id="search-input" type="text" />
</div>
Когда поле ввода сфокусировано, мне нужно, чтобы оно скрывало div «навигация», а затем заставляло его появляться снова, когда текстовое поле больше не сфокусировано.
Я несколько раз пытался выполнить это с помощью CSS, что было бы проще, чем Javascript, но безуспешно. Эффект затухания также был бы хорош.
Любая помощь приветствуется.
Ответ №1:
<script type="text/javascript">
function showNav(show) {
if (show) {
document.getElementById('navigation').style.display = '';
} else {
document.getElementById('navigation').style.display = 'none';
}
}
</script>
<div id="header-search">
<input id="search-input" type="text" onblur="showNav(true)" onfocus="showNav(false)"/>
</div>
Ответ №2:
Это можно сделать с помощью jquery, надмножества javascript. Вы можете узнать об этом (и загрузить файлы .js) по http://jquery.com
или вы можете сделать с помощью «прямого» javascript следующим образом:
<head>
<title></title>
<script type="text/javascript">
function hideNav() {
var nav = document.getElementById("navigation");
nav.style.display = "none";
}
function showNav() {
var nav = document.getElementById("navigation");
nav.style.display = "";
}
</script>
</head>
<body>
<div id="navigation">
<ul><li>something</li><li>something else</li></ul>
</div>
<div id="header-search">
<input id="search-input" type="text" onfocus="hideNav();" onblur="showNav();" />
</div>
</body>
</html>
Ваш эффект затухания и манипулирование этими и другими объектами dom становится намного проще с помощью jquery, но пока это поможет вам двигаться дальше..
редактировать после вашего комментария о том, что переход слишком «быстрый», я подумал предложить это:
<div id="container" style="width:150px;height:150px;">
<div id="navigation">
<ul><li>something</li><li>something else</li></ul>
</div></div>
если поместить навигационный div во внешний div фиксированного размера, другие элементы на странице не будут «прыгать», когда навигационный div становится скрытым. не приводит к исчезновению, но обеспечивает более чистый пользовательский интерфейс. Конечно, ваш пробег может отличаться. Что касается того, почему jquery не сработал, я не уверен без большего количества того, что вы пробовали.
Комментарии:
1. Итак, используя jquery .fadeToggle:
<script type="text/javascript"> $("#search-input").click(function() { $("#navigation").fadeToggle("slow", "linear"); }); </script>
… ничего не происходит. Я уверен, что это связано с тем, что это поле ввода и фокусировка вместо простого щелчка. Спасибо за быстрые ответы. Прямой javascript отлично работает, он просто кажется слишком «быстрым» для того, что я хочу, чтобы он делал.