#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
У меня есть простое приложение, в котором я хотел бы переключаться между отображением и скрытием элементов в наборе полей с помощью эффекта jQuery .toggle. Проблема в том, что иногда мне приходится дважды нажимать кнопку, которая включает переключение, чтобы заставить его работать.
Есть идеи о том, что происходит?
HTML:
<!DOCTYPE html>
<html>
<head>
<script src="jquery-2.1.1.min.js"></script>
<script src="test.js"></script>
</head>
<body>
<div class="LeftFrame">
<div id="LeftTable"><strong>Left</div>
</div>
<div id="MainTable"><strong>Main
<div>
<br>
<form><fieldset><legend><button id="buttonShowFields">Add Info</button></legend>
<div id="InfoAddFields">
ID: <input type="text"><br>
Serial Number: <input type="text"><br>
Location: <select id="inputLocation">
<option>Location1</option>
<option>Location2</option></select><br>
Status: <select id="inputStatus">
<option>Complete</option>
<option>In Process</option></select><br>
</div>
</fieldset></form>
</div>
</div>
</body>
</html>
… и javascript (test.js ссылка в html выше):
$(document).ready(function(){
// Show options to add workorder
// $("#WOAddFields").hide();
$("#buttonShowFields").click(function(){
$("#InfoAddFields").toggle();
});
});
Комментарии:
1. Можете ли вы что-нибудь сказать, когда для переключения требуется двойной щелчок? Анимация все еще запущена? Это только при первой загрузке? Это после того, как вы уже переключили? Является ли первый «пропущенный» щелчок близким к предыдущему щелчку и, таким образом, регистрируется как второй щелчок предыдущего щелчка? Если вы добавите консоль. войдите в оператор click, выполните все действия в консоли. события журнала отображаются или они тоже отсутствуют?
2. Что вы делаете, чтобы предотвратить отправку формы при нажатии кнопки?
3. Кажется, у меня все работает нормально (после предотвращения отправки формы и исправления некоторого HTML). jsfiddle.net/3mtT8
4. @EliGassert: кажется, просто требуется двойной щелчок случайным образом. Иногда двойное нажатие и одиночный щелчок не работают. Добавление консоли. журнал перед переключением в нажатом блоке проверяет, что иногда одиночный щелчок вообще не регистрируется.
5. Вам не хватает закрытия
</select>
для вашего первого элемента select. Также вы делаете что-нибудь, чтобы остановить отправку формы?
Ответ №1:
Предотвратите отправку с помощью event.preventDefault() при нажатии кнопки
$(document).ready(function(){
$("#buttonShowFields").click(function(e){
e.preventDefault();
$("#InfoAddFields").toggle();
});
});
Ответ №2:
У меня была такая же проблема при использовании обычного JavaScript для переключения элемента со следующей функцией:
function toggle(element){
if (element.style.display !== "none")
element.style.display = "none";
else element.style.display = "block";
}
Я заметил, что когда я добавил display:none в CSS элемента, который я хотел переключить, мне нужно было дважды щелкнуть, чтобы сначала отобразить элемент. Чтобы исправить это, мне пришлось явно добавить style=»display:none» в тег HTML-элемента.
Ответ №3:
вместо этого…
<button id="buttonShowFields">Add Info</button>
используйте это…
<input type="button" id="buttonShowFields" value="Add Info" />
Ответ №4:
Пожалуйста, измените метод события на привязку вместо щелчка.
$("#buttonShowFields").bind('click',function(){
$("#InfoAddFields").toggle();
});