2016-08-05 18 views
0

Ich habe eine Funktion, die Datenattribut des Elements durch Ajax ändern.Wie man Attribut durch Ajax erhält?

Das nächste Mal möchte ich das modifizierte Datenattribut des gleichen Elements erhalten, aber ich habe einen Wert des vorherigen Datenattributs erhalten, obwohl das Attribut geändert wurde.

Also, Was mache ich falsch?

Beispiel:

$(function(){ 
 
    $(".class1").on("click", function(){ 
 
    var attribute_data = $(this).data("attribute"); 
 
    $.ajax({ 
 
     ... // Handle 
 
     success:function(data){ 
 
      $(this).data("attribute") === "2"; 
 
     } 
 
    }); 
 
    }); 
 
    
 
    
 
    
 
    $(".class1").on("click",function(){ 
 
    var modified_attribute_data = $(this).data("attribute"); 
 
    console.log(modified_attribute_data); // will return "1" instead "2" 
 
    }); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="class1" data-attribute="1"> 
 
    Content 
 
</div>

+0

Du triggert beide "onclick" um zur gleichen Zeit, so dass Ajax nicht die Chance bekommen, zu beenden, bevor die Konsole Anruf und Protokoll erhält. –

+0

Könnten Sie ein bisschen mehr klären? Im Moment haben Sie zwei Click-Handler für das gleiche Element '$ (". Class1 ")'? – pmahomme

+0

Omg, Sie beide richtig - danke. Es ist mein Fehler. Aber ich weiß nicht, wie man einen Auslöser erstellt. Können Sie mir einen Link geben, um darüber für meine Situation zu lesen oder einfach hier zu schreiben? –

Antwort

0

wenn Sie das tun:

$(".class1").on("dblclick", function(){ 
     $(this).hide(); 
     var attribute_data = $(this).data("attribute"); 
     $.ajax({ 
     ... // Handle 
     success:function(data){ 
     $(this).data("attribute") === "2"; 
     $(this).show(); 
     } 
    }); 
}); 

und klicken Sie dann auf:

$(".class1").on("click",function(){ 
    var modified_attribute_data = $(this).data("attribute"); 
    console.log(modified_attribute_data); // will return "2" 
    }); 

Ich empfehle se die Ereignisse zu parrieren, die sie jeweils auslösen, oder irgendwie den einen oder den anderen blockierend wie eine Klasse ... und sich daran erinnern, dass Ajax asynchron ist, erwarte nicht, dass es sofort geändert wird ...