2016-06-21 4 views
1

Rückkehr Ich versuche, eine Ajax-Funktion über einen Link klicken einreichen, ich bin mit Onclick wie so:Onclick besucht den Link unabhängig von falschen

<a href="<?php echo SITE_URL; ?>watchlist/remove/<?php echo System::escape($this->item->item_id); ?>" onclick="manage_watchlist(); return false;" id="watchlist"> 
    Remove From Watchlist 
</a> 

und meine Funktion:

var manage_watchlist = function(e) 
{ 
    alert("ff"); 
    e.preventDefault(); 

    $.ajax({ 
     url: $(this).attr('href'), 
     type: 'post', 
     dataType: 'json', 
     success: function(data) 
     { 
      if(data.success) 
      { 
       if($(this).hasClass("remove")) 
       { 
        $(this).text("Add to Watchlist"); 
        $(this).removeClass("remove").addClass("add"); 
        $(this).attr('href', '<?php echo SITE_URL; ?>watchlist/add/<?php echo System::escape($this->item->item_id); ?>'); 
       } 
       else 
       { 
        $(this).text("Remove from Watchlist"); 
        $(this).removeClass("add").addClass("remove"); 
        $(this).attr('href', '<?php echo SITE_URL; ?>watchlist/remove/<?php echo System::escape($this->item->item_id); ?>'); 
       } 
       $('#watch_success_message').html(data.success + alert_close).show(); 
      } 
      else 
      { 
       $('#watch_error_message').html(data.error + alert_close).show(); 
      } 
       <!-- hide loading icon --> 
       $('.ajloading').hide(); 
     }, 
     error: function() 
     { 
      <!-- hide loading icon --> 
      $('.ajloading').hide(); 
     } 
    }); 
    return false; 
} 

Ich habe eine Warnung in die Funktion gesetzt, die so funktioniert, dass meine Funktion funktioniert, aber sie besucht immer noch den Link aus irgendeinem Grund?

+0

Sie beide nicht benötigen, sollten 'zurückkehren false' und' e.preventDefault() '... würde ich empfehlen, später nur die Verwendung. – evolutionxbox

+1

'this' in' $ .ajax' Aufruf ist '$ .ajax' Objekt. –

+0

Die Rückgabe von false verhindert nicht, dass die Verbindung ausgelöst wird. Es wird "nur" die Ausbreitung stoppen (es ist anders, wenn der Listener mit jQuery eingestellt ist, aber es ist nicht das, was Sie hier tun). –

Antwort

3

Sie müssen das Ereignis mit dem Inline-Ereignishandler übergeben.

oder noch besser, dumpen Sie das Inline-Ereignis und verwenden Sie jQuery, um das Ereignis anzuhängen.

0

Für ein Inline-Ereignis e.preventDefault(); "verhindert" Rückkehr false.

Nur return false; verwenden.

0

etwas tun:

<a href="<?php echo SITE_URL; ?>watchlist/remove/<?php 
echo System::escape($this->item->item_id); ?>" id="watchlist"> 
    Remove From Watchlist 
</a> 

//JS 
$(document).ready(function(){ 
    $('#watchlist').click(function(e){ 
    var $this = $(this); //**this** is the anchor 
    e.preventDefault(); //e is click event. 
    $.ajax({//use $this when you mean the anchor 
     //**this** here is $.ajax 
     //... 
     //your code here 
    });//$.ajax 
    });//$('#watchlist').click 
});//$(document).ready 
0

Wenn Sie Code in den String setzen für Onclick es nicht tun, als Sie vielleicht denken, es tut. Es verhält sich ähnlich wie diese:

function(event) { 
    manage_watchlist(); 
} 

weshalb Sie das Ereignisobjekt an Ihre Funktion in der HTML-Onclick passieren muss.

onclick="manage_watchlist(event);" 

aussehen wird

function(event) { 
    manage_watchlist(event); 
} 
Verwandte Themen