jquery щелкните один раз, затем отключите / включите элемент - PullRequest
2 голосов
/ 08 октября 2009

у меня много строк

  1. Элемент списка - удалить
  2. Элемент списка - удалить
  3. Элемент списка - удалить

как и выше 3 строки .. у него есть ссылка для удаления, при клике я хочу отключить эту ссылку, пока я не получу ответ от ajax, говорящий: «Хорошо, удалите его или нет, не хорошо, не удаляйте его, пользователь не является владельцем, тогда должен вернуть элемент к кликабельности .. если это имеет смысл

в основном предотвращает элемент при щелчке, а затем восстанавливает его элемент при ошибке из серверной части.

Какие методы мне нужно использовать для этого? я использую живой метод, если я использую die, то как я восстановлю снова?

Ответы [ 2 ]

3 голосов
/ 08 октября 2009

По запросу, вот версия, в которой вместо кнопок используются ссылки.

<ol>
    <li id="item-1">List item <a href="delete.php?1">Delete</a></li>
    <li id="item-2">List item <a href="delete.php?2">Delete</a></li>
    <li id="item-3">List item <a href="delete.php?3">Delete</a></li>
</ol>

И поддержка JS для этого будет

$("ol").click(function(evt){
    if (evt.target.nodeName != "A") {
        return true;// it's not the delete link, so we don't have to do anything
    }
    var listItem = $(evt.target.parentNode);
    if (listItem.hasClass("disabled")) {
        return true;// we're still processing this already deleted list item
    }
    listItem.addClass("disabled");// lock the list item (perhaps visually too)

    // set up the AJAX call
    $.post("evaluator.php", {listId : listItem.attr("id")}, function(data){
        // let's suppose that we get "1" if the user can perform the procedure
        if (data == "1") {
           // request approved, remove the list item
           listItem.fadeOut("fast", function(){
               $(this).remove();
           });
        } else {
            // release the lock
            listItem.removeClass("disabled");
            // request denied, rollback
            alert("Sorry, you can't do that.");
        }
    });
    // here we stop the click event, so the URL in href won't be called.
    // you can "disable" a link by returning false on a click event
    // e.g. <a href="url" onclick="return false">disabled link</a>
    return false;
});
1 голос
/ 08 октября 2009

Лучшим способом было бы создать отдельную функцию для обработки вызова AJAX, чтобы вы могли сделать

$(".delete").bind("click", deleteItem);

И в вашей функции deleteItem вы можете отменить это, выполнив

function deleteItem(delBtn) {
    $(delBtn).unbind("click", deleteItem);
    //ajax call
    onerror: function() {
        $(delBtn).bind("click", deleteItem);
    }
}

edit: Понял, что вы используете live, это просто еще одна версия bind. Таким образом, в приведенном выше примере вы можете просто переключить ключевое слово bind на live и unbind на die. И он должен сделать то же самое (:

...