2017-09-12 6 views
0

ich diese Funktion hatte ursprünglich ein Element zu entfernen, wenn die delete-item Schaltfläche geklickt wird:

$(document).on("click", ".delete-item", function() { 

        console.log("Removing "+$(this).data('id')); 
        var id=$(this).data('id'); 
        var parent=$(this).parent().parent().parent();  
        parent.remove(); 
        $(".subitem-row"+id).remove(); 
        applyCartChanges(); 

}); 

Es funktioniert gut. Aber wenn ich versuche, einen Dialog zu tun (mit OnsenUI und PhoneGap) es zu bestätigen, bevor entfernen, wie folgt aus:

$(document).on("click", ".delete-item", function() { 

     ons.notification.confirm({ 
      message: getTrans('Remove from cart?','remove_from_cart') ,  
      title: dialog_title_default , 
      buttonLabels: [ getTrans('Yes','yes') , getTrans('No','no') ], 
      animation: 'default', // or 'none' 
      primaryButtonIndex: 1, 
      cancelable: true, 
      callback: function(index) { 

       if (index==0){       

        console.log("Removing "+$(this).data('id')); 
        var id=$(this).data('id'); 
        var parent=$(this).parent().parent().parent();  
        parent.remove(); 
        $(".subitem-row"+id).remove(); 
        applyCartChanges(); 

       } 
      } 
     }); 

}); 

Dann plötzlich ist es nicht mehr funktioniert :(In der Konsole, heißt es undefined für die Irgendwelche Ideen $(this).data('id'). warum?

+1

Zeigen Sie uns Ihren HTML-Code. schwer für uns, um den Fehler ohne –

+0

zu zeigen versuchen Sie mit '$ (this) .attr ('Daten-ID')' – prasanth

+0

Sie fehlen den Verweis auf diese "innerhalb der Callback-Funktion. Überprüfen Sie die Antwort –

Antwort

2

Dies liegt daran, der Verweis auf this nicht als klickten Element innerhalb des Dialogs erhalten. so umschreiben Code als

$(document).on("click", ".delete-item", function() { 
     var _this = this; 
     ons.notification.confirm({ 
      message: getTrans('Remove from cart?','remove_from_cart') ,  
      title: dialog_title_default , 
      buttonLabels: [ getTrans('Yes','yes') , getTrans('No','no') ], 
      animation: 'default', // or 'none' 
      primaryButtonIndex: 1, 
      cancelable: true, 
      callback: function(index) { 

       if (index==0){       

        console.log("Removing "+$(_this).data('id')); 
        var id=$(_this).data('id'); 
        var parent=$(_this).parent().parent().parent();  
        parent.remove(); 
        $(".subitem-row"+id).remove(); 
        applyCartChanges(); 

       } 
      } 
     }); 

}); 

Beachten Sie, dass ich den Bezug von 012 genommen habeinnerhalb einer neuen Variablen _this, so dass es innerhalb des Dialogs zugänglich sein wird.

+0

Ah lösen! Ich habe etwas neues gelernt, danke :) Wird deine Antwort annehmen, sobald es mir in ein paar Minuten erlaubt! – user1996496

+0

Sicher danke. Froh, Ihnen zu helfen –

+0

Bitte vergessen Sie nicht, die Antwort zu markieren –

Verwandte Themen