Диалоговое окно jQuery отображается только один раз

У меня рассол с моим jQuery. Ситуация следующая: у меня загружается страница (главная). При нажатии на определенный элемент открывается div с другой страницей (page1). На этой загруженной странице у меня есть кнопка, которая открывает диалоговое окно, содержащее другую загруженную страницу (страница2).

Все это работает нормально, на один раз. Когда я закрываю диалоговое окно, оно больше не появляется при нажатии кнопки на странице 1.

Я искал в Интернете, но решения мне не помогают. Я не могу понять, что я делаю неправильно здесь. Это очень распространенная проблема, но, кажется, у меня правильный код, верно?

Это мой код (во всяком случае, полезная часть):

<script>
$(document).ready(function(e) {
    $("#editdialog").dialog({
                autoOpen: false,
                width: 400,
                height: 600,

    });

    $(".editfreight").one("click", function(){
        $("#editdialog").load("inc/ajax/editfreight_ajax.php?id=" + $(this).data("freight"));
        $("#editdialog").dialog("open");

    });


});

</script>

<div id="editdialog" style="display: hidden"></div>

Ну, я надеюсь, что кто-то может помочь мне здесь! Я также пробовал это:

$(".editfreight").one("click", function(){
$("#editdialog").dialog({
                    autoOpen: false,
                    width: 400,
                    height: 600,
                    close: function() {
                          $("#editdialog").dialog("destroy")

        });
        $("#editdialog").load("inc/ajax/editfreight_ajax.php?id=" + $(this).data("freight"));
    $("#editdialog").dialog("open");
)};

Таким образом, я решил, что инициирую диалог, когда нажимаю кнопку (а не при загрузке страницы), и уничтожаю экземпляр, когда закрываю диалог. Видимо это тоже не работает.


person JarroVGIT    schedule 20.09.2012    source источник


Ответы (3)


Вложение обработчика событий должно быть on("click"), а не one("click"), one сработает только один раз

$(".editfreight").on("click", function(){
});

см. one документ: http://api.jquery.com/one/

one(): Прикрепите обработчик к событию для элементов. Обработчик выполняется не более одного раза для каждого элемента.

person Mifeng    schedule 20.09.2012
comment
Это помогло. Я использовал one(), потому что Dreamweaver не распознает on(). Глупая ошибка. Спасибо, что заметили! - person JarroVGIT; 20.09.2012

Измените это и попробуйте

$(".editfreight").one("click",function(){

изменить на

$(".editfreight").click(function(){

изменить эту строку тоже

close: function() {
     $("#editdialog").dialog("close")
person Miqdad Ali    schedule 20.09.2012

Заменять

$(".editfreight").one("click", function(){

by

$(".editfreight").click(function(){

one работает только один раз.

person Denys Séguret    schedule 20.09.2012