2009-10-08 6 views
2

j'ai plusieurs lignesjquery cliquez une fois, puis désactiver/activer l'élément

  1. élément de liste - supprimer
  2. élément de liste - supprimer
  3. élément de la liste - supprimer

comme ci-dessus 3 rangs .. il a supprimer le lien, sur le clic je veux désactiver ce lien, jusqu'à ce que je reçois la réponse d'ajax dire ok le supprimer ou non pas ok, ne le supprime pas, l'utilisateur n'est pas un propriétaire, alors je dois redonner l'élément à cliquable .. si cela fait sence

empêchant fondamentalement l'élément sur le clic puis la restauration de son élément sur erreur du backend.

Quelles méthodes dois-je utiliser pour cela? Im en utilisant la méthode en direct, si j'utilise mourir, alors comment vais-je restaurer à nouveau?

Répondre

3

Comme demandé, voici une version qui utilise des liens au lieu des boutons

<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> 

et le soutien JS pour ce serait

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

comment peut-il être fait avec le lien et pas seulement le bouton ... mais vous pouvez désactiver le clic en définissant la propriété désactiver d'un bouton, mais ne sais pas comment désactiver un lien. – Basit

+0

J'ai modifié le code comme vous l'avez demandé. J'espère que cela aide. – Wabbitseason

1

La meilleure façon serait de créer une fonction distincte pour gérer l'appel AJAX, vous pouvez donc faire

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

Et dans votre fonction deleteItem vous pouvez délie qu'en faisant

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

edit: Réalisé vous utilisez live, qui est juste une autre version de bind. Donc, dans l'exemple ci-dessus, vous pouvez simplement changer le mot-clé bind pour live, et unbind pour die. Et il doit faire la même chose (:

+0

méthode en direct ... bind ne sera pas utile pour ajax auto behindings – Basit

+0

bind/unbind fonctionne de la même manière que live/die http://docs.jquery.com/Events/die – peirix

+0

je comprends d'avoir vivre et mourir comme même .. mais si vous appelez mourir , alors il va tuer tous les événements des éléments, pas seulement célibataires, et vivre met un événement à tous l'élément, tout comme bind .. mais seulement il continue d'ajouter plus d'événements sur le nouvel élément, qui a été ajouté plus tard par ajax. vraiment mourir n'est pas une solution pour cela. – Basit

Questions connexes