jQuery: не удается получить атрибут динамически созданного элемента DOM - PullRequest
0 голосов
/ 29 апреля 2011

Вот ситуация: я пишу простое AJAX-приложение, которое выполняет функции CRUD. Когда пользователь дважды щелкает по определенному элементу, элемент превращается в текстовое поле, чтобы они могли редактировать его внутри строки. Когда текстовое поле теряет фокус (код для которого приведен ниже), значение текстового поля переносится в сценарий PHP, который обновляет базу данных.

Все отлично, кроме одной вещи. Когда я создаю новую запись, которая появляется в верхней части списка с помощью AJAX, я не могу редактировать эту запись без обновления страницы. Я имею в виду, что редактирование выглядит как будто оно было зафиксировано, но при обновлении оно возвращается к оригиналу. После обновления проблем нет.

Чтобы свести его к минимуму: Когда я пытаюсь запустить следующий код на вновь созданных строках в моей таблице (как в базе данных, так и на странице), редактирование отображается в быть сделанным на странице, но никогда не попадет в базу данных.

//Make changes on FOCUSOUT
    $('#editable').live('focusout', function(){
        var parentListItem = $(this).parents('li');
        var theText = $(this).val();
        var parentListItemID = parentListItem.parents('ul').attr('id');

        $(this).remove();
        parentListItem.html(theText);
        parentListItem.removeClass('beingEdited');

        $.post("databasefuncs.php?func=edit", { postedMessage: parentListItemID, fullTextContent: theText },
            function(result){
                if(result == 1) {
                    parentListItem.parents('ul').animate({ backgroundColor: 'blue' }, 500).animate({ backgroundColor: '#eeeeee' }, 500);
                } else {
                    alert(result);
                }

            });

    });

Ответы [ 2 ]

1 голос
/ 29 апреля 2011

Полагаю, вы не привязываете событие к новому элементу DOM, загруженному через AJAX.

0 голосов
/ 30 апреля 2011

Ваша проблема в том, что сообщение выполняется, но функция, на которую вы нацелены (func = edit), никогда не срабатывает, параметры, которые вы отправляете после знака вопроса, никогда не читаются вашим php, вы отправляете запрос на сообщение и хотите, чтобы он работал как получить, прикрепив параметры к URL, измените ваш запрос на:

$.ajax({
 type: "POST",
 url: "databasefuncs.php",
 data: {func: "edit", postedMessage: parentListItemID, fullTextContent: theText},
 success: function(data, textStatus, jqXHR) {
    if(textStatus === "success") {
      parentListItem.parents('ul').animate({ backgroundColor: 'blue' }, 500).animate({ backgroundColor: '#eeeeee' }, 500);
    }
    else {
       alert(textStatus);
    }
 } 
});

Теперь в вашем PHP есть $ _POST ["func"] = "edit";

Надеюсь, это понятно, и это помогает. Приветствия.

...