Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    residenza
    Cagliari
    Messaggi
    198

    Problema con variabili che si ripetono

    Dopo aver definito 3 variabili riguardo 3 diverse lingue del browser del visitatore
    e altre 3 variabili riguardo 3 diversi device utilizzati dal visitatore...

    Ho deciso di scrivere un codice per mandare:
    su google.it i visitatori con browser in italiano che navigano da blackberry, nokia, android;
    su google.co.uk i visitatori con browser in inglese che navigano da blackberry, nokia, android;
    su google.fr i visitatori con browser in francese che navigano da blackberry, nokia, android.

    Ho quindi tramutato in codice:
    se (italiano e blackberry o nokia o android) {apri google.it}
    se invece (inglese e blackberry o nokia o android) {apri google.co.uk}
    se invece (francese e blackberry o nokia o android) {apri google.fr}

    codice:
    var italiano = detect browser italiano;
    var inglese = detect browser inglese;
    var francese = detect browser francese;
    var blackberry = detect navigator blackberry;
    var nokia = detect navigator nokia;
    var android = detect navigator android;
    
    if (italiano && blackberry || nokia || android)  {window.open('google.it');}
    else if (inglese && blackberry || nokia || android)  {window.open('google.co.uk');}
    else if (francese && blackberry || nokia || android)  {window.open('google.fr');}
    Il problema è che anche i device in lingua inglese e francese vengono rimandati a google.it

    Dove sbaglio?

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Sbagli nell'impostazione di quelle condizioni.

    Data questa espressione:
    codice:
    valore1 && valore2 || valore3 || valore4
    la prima valutazione che viene fatta è proprio l'operatore && (AND logico) tra valore1 e valore2.
    Otterrai quindi false a meno che i due valori siano entrambi true.

    Se la prima valutazione è false, l'interprete va avanti con la seconda, dal momento che a seguire hai un operatore || (OR logico).
    Avrai quindi:
    codice:
    false || valore3
    Se anche valore3 è false si andrà avanti con la terza, dal momento che anche lì c'è un operatore ||.

    Nel tuo caso, la prima condizione è sempre vera se almeno uno dei valori tra nokia e android è vero.
    Mentre se è vero (tra gli ultimi 3) soltanto il valore blackberry, allora conta la valutazione di uno dei primi 3 valori (italiano, inglese, francese).

    Dovresti utilizzare qualche parentesi per definire meglio l'ordine con cui eseguire la valutazione degli operatori logici.
    Una cosa del genere dovrebbe risolvere:
    codice:
    if (italiano && (blackberry || nokia || android))  {...}
    else if (inglese && (blackberry || nokia || android))  {...}
    else if (francese && (blackberry || nokia || android))  {...}
    Ad ogni modo questa impostazione risulta comunque essere ridondante dal momento che la seconda espressione da valutare è uguale per tutte le condizioni e che lo statement è sostanzialmente simile.

    Per ottimizzare farei una cosa del genere:
    codice:
    if ((italiano || inglese || francese) && (blackberry || nokia || android))
      window.open('https://www.google.'+ ((italiano && 'it') || (inglese && 'co.uk') || (francese && 'fr')));
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    residenza
    Cagliari
    Messaggi
    198
    Semplicemente geniale!
    Sei sempre il numero 1...
    Grazie mille!!
    Buona serata

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.