2016-05-18 13 views
1

Ich versuche, spezifische <a> in if-Anweisung auszuschließen, basierend auf ihren href Werten. Genauer gesagt zeige ich einen preloader div, wenn auf irgendwas geklickt wird, außer auf diejenigen, die javascript auslösen oder enthalten. Dadurch sehen meine Benutzer einen schönen Bildschirm, während sie auf das Laden der Seite warten.jQuery/JS - Wie kann ich <a> mit spezifischen href in Bedingungen ausschließen?

Ich habe diese kleine js Dinge geschrieben:

$('a').click(function() { 
    var href = $(this).attr('href'); 

    //my conditions 
    if ((href != '#') || (href != 'javascript:void(0);')) { 
    $('#preloader').fadeIn("fast"); 
    } 
}); 

//Showing preloader 
$(window).load(function() { 
    $('#preloader').fadeOut("slow"); 
}); 

Meine Anweisung funktioniert ohne Links # enthalten, aber für diejenigen mit javascript:void(0);, tut es nicht statt. Das ist mein Problem. Was mache ich falsch? Gibt es einen Fehler in der Anweisung oder in den Werten?

+0

Könnten Sie einige Markup mit Ihrem Beispiel bieten zu überprüfen? Auf den ersten Blick funktioniert Ihr Handler richtig. Vielleicht haben Sie einen Tippfehler in Ihrem Anker href – Seth

+0

@Seth Vielen Dank für Ihre Antwort, ich habe bereits behoben es die Umsetzung der Antwort unten. Ich wünsche ihnen einen wunderbaren Tag. – XiLab

Antwort

1

Es gibt zwei unmittelbare Ansätze, die ich das Problem mit dem angegebenen Code zu adressieren denken kann:

  1. Ihre Bedingungen falsch sind.

$('a').not('[href="#"]').not('[href="javascript:void(0);"]).click(function() { 
    $('#preloader').fadeIn("fast"); 
}); 

Siehe jQuery Attribute Not Equal Selector: if((href != '#') || (href != 'javascript:void(0);')) sollte aus der Abfrage selbst if(href != '#' && href != 'javascript:void(0);')

  • Optimal ausschließen irrelevant Elemente sein.

  • +1

    Ich stimme Ihrer ersten Aussage nicht zu. Es sollte kein logisches UND sein, da ein href entweder '#' ODER 'javascript: void (0);' enthält. Wenn es beide enthält, dann tut jemand etwas falsch. Auch das OP verlangt, dass es entweder für ODER ist. Allerdings ist Ihr Vorschlag, '.not' zu verwenden, definitiv das, wonach der OP sucht. – Seth

    +1

    Bombe! Ich habe es versucht und die zweite Methode entwickelt. Vielen Dank für deine Hilfe. – XiLab

    +0

    @Seth, die Bedingungen sind negiert, also '&&' ist was du willst: Anker deren 'href' Attribute sind ** nicht **' # '** und nicht **' javascript: void (0); ' : [JSFiddle] (https://jsfiddle.net/yuyoa060/) –

    0

    Diese Antwort kann jemand helfen .. und eine andere Art und Weise

    if($(this).is(':not([href^="#"]):not([href^="javascript:"])')){ 
        $('#preloader').fadeIn("fast"); 
    } 
    

    $('a').on('click',function(e){ 
     
    \t e.preventDefault(); 
     
    \t if($(this).is(':not([href^="#"]):not([href^="javascript:"])')){ 
     
        \t alert('Good'); 
     
        } 
     
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <a href="javascript:void(0);"> 
     
        click 
     
    </a><br /> 
     
    <a href="#"> 
     
        click 
     
    </a><br /> 
     
    
     
    <a href="go"> 
     
        click 
     
    </a><br />