Вот краткая и тонкая моя проблема:
$("a").toggle(function() { /*function A*/ }, function() { /*function B*/ });Внутри function A отображается форма. Если пользователь успешно заполняет форму, форма снова скрывается (возвращается в исходное состояние).
Внутри function B спрятана такая же форма.
Теория, лежащая в основе этого, заключается в том, что пользователь может выбрать отображение формы и заполнение ее, или он может щелкнуть еще раз, и форма снова будет скрыта.
Теперь мой вопрос таков: в настоящее время, если пользователь успешно заполняет форму - и она скрывается, - пользователю придется щелкнуть ссылку дважды, прежде чем вернуться в состояние переключения, которое отображает форму.
Есть ли способ программно вернуть тумблер в исходное состояние?

jQuery имеет два метода .toggle():
Toggles each of the set of matched elements. If they are shown, toggle makes them hidden. If they are hidden, toggle makes them shown.
Toggle between two function calls every other click.
В этом случае вам нужен первый. Что-то вроде этого должно помочь:
$("a").click(function() {
$("#theForm").toggle();
});
Синтаксис четный / нечетный удален в jQuery 1.9. jquery.com/upgrade-guide/1.9
Ах, это простые вещи в жизни ...
Я использовал последнее определение toggle(even,odd);, но я забыл включить в свое первоначальное описание проблемы, что моя вторая функция переключения не только скрывала форму, но и разрушала ее.
function A: Ajax загружает форму в добавленный div. Скрыть и уничтожить div в успешной публикации формы.
function B: уничтожить div.
Вы оба напомнили мне, что toggle(); имеет дело только со свойством CSS и поэтому не подходит для этой задачи. Но потом я понял, что без надобности перезагружал форму для каждого «нечетного» состояния, уничтожая ее, когда я был готов, поэтому я в конце концов вернулся к этому:
$("link").click(function() {
if ($(this).siblings(".form-div").length == 0) {
// form is not loaded; load and show the form; hide when done
}
else {
$(this).siblings(".form-div").toggle();
}
});... который делает то, что я хочу. Спасибо, что разъяснили мне toggle();!
Вот что я использовал:
$(document).ready(function() {
$('#listing_position').click(function() {
var div_form = $('#listing_position_input');
if (div_form.hasClass('hide')) {
div_form.removeClass('hide');
} else {
div_form.addClass('hide');
}
});
});
если вы просто хотите переключить этот один класс, есть метод .toggleClass ()
Пошел с этим, чтобы избежать дополнительного класса скрытия / показа. Я думаю, что это более гибкое решение, чем решение foxy, поскольку вы можете добавить больше функций внутри, но не цитируйте меня, что я новичок
$("#clickie").click(function(){
if ( $("#mydiv").css("display") == "none" ){
$("#mydiv").show();
} else {
$("#mydiv").hide();
}
Вы можете проверить состояние переключателя в jQuery с помощью .is(":hidden"). Итак, в базовом коде я использовал:
$("#div_clicked").click(function() {
if ($("#toggle_div").is(":hidden")) {
// do this
} else {
// do that
}
}); # add missing closing
$("#div_clicked").click(function() {
if ($("#toggle_div").is(":visible")) {
// do this
} else {
// do that
}
Заменить скрытое на видимое
все, что вы сделали, это скопировали другой ответ, и вы даже не скопировали правильно.
@CodeMonkey Однако он все еще предоставляет некоторую дополнительную информацию, я не знал, что можно использовать ": visible" :-)
Вот учебник по Как создать плагин JQuery для преобразования переключателей в переключатели и Здесь вы можете увидеть демо