Jquery .live () по-прежнему не выполняет функции правильно - PullRequest
1 голос
/ 19 августа 2011

Хотя я видел похожие посты, я не смог найти точную причину / решение моей проблемы, поэтому я надеюсь, что я не просто перепишу то, что просили другие:

Недавно я обнаружил, что в jquery .live () позволяет моим функциям прикрепляться к элементам, которые динамически добавляются на страницу. Итак, у меня есть список элементов, я нажимаю «Удалить», который использует функцию get, используя href в качестве переменной get, которая затем удаляет этот элемент из моей базы данных и обновляет список.

Итак, с помощью функции live мне удалось добавить эту же функцию в обновленный список. Проблема, однако, заключается в том, что переменная get, указывающая, какой элемент для удаления, кажется, застряла на последнем номере.

Так что, если я удаляю элемент 13, то список обновляется, и я пытаюсь удалить, скажем, элемент 15, кажется (из firebug), что переменная get снова пытается удалить элемент 13, а не 15

извиняюсь за запутанный код:


    $(document).ready(function() {

    $('.delav').live('click', function(e) {
        e.preventDefault();
                var pager = $(this).attr("href");
        $("#dialog2").dialog({
            autoOpen: false,
            width: 600,
            modal:true,
          buttons : {
            "Confirm" : function() {
                  $('#ava_list').html("Loading..");

            var pai =$('#epa_id').val();
                $.get("/_includes/functions.php", { table: "availability", pa: pai,delattr: pager} ,function(data) {$('#ava_list').html(data);});
            $(this).dialog("close");
            },
            "Cancel" : function() {
              $(this).dialog("close");
            }
          }
        });

        $("#dialog2").dialog("open");

    });
    });

Ответы [ 2 ]

3 голосов
/ 19 августа 2011

Может показаться, что у вас есть несколько элементов ввода с идентификатором 'epa_id'. В этом случае вам нужно будет удалить дубликаты идентификаторов и использовать обход DOM, чтобы вместо этого получить правильный элемент относительно нажатой .delav.

Для конкретного решения нам потребуется увидеть вашу разметку.

2 голосов
/ 19 августа 2011

Вместо использования $ .live () в JQuery refrence рекомендуется использовать делегаты

    $('.highlevelclasshere').delegate('click', function(e) {
       e.preventDefault();
       var pager = $(this).attr("href");
        $("#dialog2").dialog({
           autoOpen: false,
           width: 600,
           modal:true,
        buttons : {
        "Confirm" : function() {
              $('#ava_list').html("Loading..");

        var pai =$('#epa_id').val();
            $.get("/_includes/functions.php", { table: "availability", pa: pai,delattr:         pager} ,function(data) {$('#ava_list').html(data);});
        $(this).dialog("close");
        },
        "Cancel" : function() {
          $(this).dialog("close");
        }
      }
    });

    $("#dialog2").dialog("open");

});
...