2008-10-28 2 views
16

Вот быстрый и тощий моего вопроса:JQuery Переключить государственный

$("a").toggle(function() { /*function A*/ }, function() { /*function B*/ });

Внутри function A отображается форма. Если пользователь успешно завершил форму, форма снова скрыта (возвращается в исходное состояние).

Внутри function B такая же форма скрыта.

Теория заключается в том, что пользователь может отображать форму и заполнять ее, или они могут снова щелкнуть и вернуть форму обратно в сокрытие.

Теперь мой вопрос заключается в следующем: в настоящее время, если пользователь заполняет форму успешно - и она уходит в подполье - пользователь должен щелкнуть по ссылке дважды перед возвращением в состоянии переключения, что отображает форму.

Есть ли в любом случае программный сброс тумблера в исходное состояние?

+0

Вот учебник по [Как создать JQuery плагин для преобразования радиокнопки в кнопки Toggle] (HTTP: // sgeek. org/jquery-toggle-button-plugin-for-slide-toggle-switch-sswitch /) и [Здесь вы можете увидеть демонстрацию] (http://www.demos.sgeek.org/sswitch-jquery-plugin-demo/) – 2017-02-13 05:17:38

ответ

18

JQuery имеет два метода: .toggle()

.toggle()

Toggles каждый из набора соответствующих элементов. Если они показываются, переключатель делает их скрытыми. Если они скрыты, toggle показывает их.

.toggle(even, odd)

Переключение между двумя вызовы функций любой другой мыши.

В этом случае вы хотите первый. Нечто подобное должно сделать трюк:

$("a").click(function() { 
    $("#theForm").toggle(); 
}); 
+11

Четный/нечетный синтаксис удаляется в jQuery 1.9. http://jquery.com/upgrade-guide/1.9/ – 2013-01-18 18:33:15

2

Ahh, это простые вещи в жизни ...

Я использовал последнее определение 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();!

5

Вот что я использовал:

$(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'); 
     } 
    }); 
}); 
+0

Это было единственное, что работало для меня надежно. – 2009-11-22 18:46:29

+0

, если вы просто хотите переключить этот класс, есть метод .toggleClass() – 2012-04-09 07:59:29

2

Ходила с этим, чтобы избежать дополнительного скрыть/показать класс. Я думаю, что это является более гибким, чем решение Foxy, как вы можете добавить больше функций внутри, но не цитируйте меня, что я нуб

$("#clickie").click(function(){ 
    if ($("#mydiv").css("display") == "none"){ 
    $("#mydiv").show(); 
     } else { 
     $("#mydiv").hide(); 
} 
35

Вы можете проверить состояние переключателя в JQuery с помощью .is(":hidden") , Таким образом, в основном коде, что я использовал:

$("#div_clicked").click(function() { 
    if ($("#toggle_div").is(":hidden")) { 
    // do this 
    } else { 
    // do that 
} 
}); # add missing closing 
+2

Это правильный ответ. – 2014-05-12 15:49:54

-2
$("#div_clicked").click(function() { 
    if ($("#toggle_div").is(":visible")) { 
    // do this 
    } else { 
    // do that 
} 

Replace скрыты с видимым