E.PREVENTDEFAULT (); niet werken

Ik heb echte problemen met het krijgen van e.preventDefault();om te werken.

Hier is mijn code

$('#ListSnapshot a').live('click', function(e){
    var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable';
    $('#ListSnapshot').load(url);
    e.preventDefault();
});

Kan iemand uitleggen wat ik verkeerd doe, ik kan de ladingsfunctiewerk zien, maar vervolgens wordt de pagina doorverwijst naar de geklikte link die ik moet voorkomen.

Ik heb ook geprobeerd het verplaatsen van e.preventDefault();naar de bovenkant van de functie, zonder baten.


Antwoord 1, Autoriteit 100%

Ik had een soortgelijk probleem, waarin e.preventDefault()zou werken aan sommige gevallen, maar niet op anderen. Het toonde geen fouten en gebruikmakend van try-catchwas niet weergeven van de catch alert.
Het toevoegen van e.stopImmediatePropagation()deed de truc, in het geval dat het iedereen (groot dank aan WCPRO)

helpt


Antwoord 2, Autoriteit 27%

Ik denk dat u de volgende scenerio hebt … tenminste, dit zal de fout

reproduceren

U kunt een evenement hoger hebben die is ingesteld voor de Hover-gebeurtenis, die gebeurtenis kan binden gebruiken, en zelfs als u E.PreventDefault noemt, belt het nog steeds de bind, zodat u misschien een hoger nodig hebt het gebruik live in plaats van binden. Dan zou het moeten werken zoals verwacht. Controleer dit monster.

http://jsfiddle.net/rodmjay/mnkq3/

$('div').bind ('click', function(){ // <-- switch this to live and you will see different behavior
    alert('div click');
});
$('a').live('click', function(e){
    alert('a click');
    e.stopImmediatePropagation();
});

Antwoord 3, autoriteit 16%

De code die je hebt opgegeven, zou zeker moeten werken (werkvoorbeeld). Er moet een ander probleem zijn met je code.

Probeer een waarschuwing in uw gebeurtenishandler te plaatsen om er zeker van te zijn dat deze helemaalwordt geactiveerd. Het is mogelijk dat uw #ListSnapshot aniets vindt.

Als er iets anders mis is in je handler, veroorzaakt dat een uitzondering, die zou kunnen voorkomen dat het javascript helemaal tot aan de preventDefault-aanroep wordt uitgevoerd. Ik zie niet wat dat zou kunnen zijn in de code die je hebt gegeven.


Antwoord 4, autoriteit 8%

Ik denk dat het antwoord van @David Hedlund correct is, er moet een uitzondering zijn. Wanneer ik gebeurtenishandlers schrijf, gebruik ik een try...catch-blok om ervoor te zorgen dat de standaardactie niet plaatsvindt. Probeer dit:

$('#ListSnapshot a').live('click', function(e){
    try {
        var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable';
        $('#ListSnapshot').load(url);
    } catch(ex) {
        alert('An error occurred and I need to write some code to handle this!');
    }
    e.preventDefault();
});

Op die manier, aangezien e.preventDefault();buiten het try-blok valt, zelfs als er een fout optreedt, e.preventDefault();wordt nog steeds gebeld.


Antwoord 5, autoriteit 5%

Probeer falsete retourneren. livewerkt niet altijd op dezelfde manier als bindwerkt. controleer jQuery docs.


Antwoord 6, autoriteit 5%

Heb je geprobeerd de gebeurtenis-handler eerst in $(document).ready(…) in te pakken? Gewoon een gedachte.


Antwoord 7, autoriteit 5%

e.preventDefault() zou moeten worden uitgevoerd vóór de andere regels code in de handler.

$('#ListSnapshot a').live('click', function(e){
    e.preventDefault();
    var url = $(this).attr('href') +' #WebPartWPQ2 .ms-listviewtable';
    $('#ListSnapshot').load(url);
});

Antwoord 8

Oude vraag, maar dit is precies het soort moment waarop je zou moeten zien wat firebug in de console logt of als fout teruggeeft. Iets in uw code verhindert duidelijk dat preventDefault() een omleiding verhindert.

Other episodes