Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    onfocus e onblur per più elementi contemporaneamente

    codice:
    <html><head>
    <script type="text/javascript">
    function typing(bool){
        if(bool) document.getElementById('demo').innerHTML="ready to send";
        else document.getElementById('demo').innerHTML="not ready...";
    }
    function typefalse(){
    var summonIt=true;
    document.getElementById('bottone').onfocus = function(){summonIt=false};
    document.getElementById('bottone').onclick = function(){summonIt=false};
    if(summonIt==true){typing(false)};
    }
    </script>
    </head><body>
    <input type="text" onkeypress="typing(true)" onblur="typefalse()"/>
    <button id="bottone">BUTTON</button>
    <p id="demo">not ready...</p>
    </body></html>
    Qui c'è lo script testato con jsfiddle: JSFIDDLE

    Ho scritto questo codice per tentare di fare una cosa: quando scrivi una qualche lettera nel textfield si attiva una function, quando poi lasci il textfield una seconda function s'attiva...
    Però questa seconda function non dovrebbe attivarsi se lasciando il textfield si clicka sul pulsante a fianco o lo si evidenzia (magari premendo TAB)
    Ho provato con questo javascript ma non funziona, qualche idea?

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    L'evento onblur non è utilizzabile per quello che vuoi fare una "soluzione" potrebbe essere questa http://webprogetti.it/event.html ho usato jquery e gli eventi mouseenter/mouseleave (che non esistono in js pertanto non saprei replicarli)
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Mmm, no, non è quello che stavo cercando di fare, mi spiace XD
    In più vorrei arrivare ad usare un SDK come ultima risorsa.
    Non è la posizione del mouse ad interessarmi...
    Immagina un form intorno al textfield e al button... l'evento onblur dovrebbe verificarsi quando lascio il form, e non quando lascio il textfield, quindi onblur = nessun elemento del form è attivo o evidenziato.

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Resto della mia idea onblur non può essere utilizzato per i seguenti motivi:
    a) l'evento viene scatenato all'uscita a prescindere essendo la sua natura
    b) il form non dispone di quell'evento applicabile sono ad alcuni input del form
    Come non detto auguri comunque

    P.S. Gli eventi mouseenter/mouseleave puoi associarli anche al form non necessariamente ad un div
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Mmm... No, non mi sto spiegando bene!! XD

    Lascialo perdere il mouse, il mouse non c'entra, io navigo nel web usando quasi esclusivamente il tasto TAB, il D-PAD, lo SPACE, PagUP e PagDOWN... Il mouse lo uso raramente quando navigo su siti web semplici.
    In più sul mio sito c'è un autofocus sul textfield appena entri.
    Quindi studiare la posizione del mouse non mi serve a nulla.

    Allora... onBlur funziona come segue: "appena lasci l'Elemento onFocus onBlur s'attiva!"
    Ma non funziona con i form... ok.
    C'è qualcosa simile all'onBlur che posso usare con i form?
    Oppure c'è un evento simile all'onBlur (indipendentemente da 'sto mouse) che verifica quando un evento non è più onFocus?

    No no, ma una soluzione forse ce l'ho, solo che non ho capito una cosa:
    nello javascript .onfocus, .onblur, .onkeypress... sono function, no? ci stanno le controparti booleane?
    Se io potessi fare una cosa tipo: "if(element.onfocus)" dovrei aver risolto, solo che non so come si fa con lo javascripy.
    Io so solo come associare una di queste azioni ad una funzione...

  6. #6
    Puoi usare una variabile globale (visibile in tutte le funzioni):
    codice:
    <script type="text/javascript>
    
    var focused=false;
    
    var el=document.getElementById("id");
    el.onfocus=function(){
       focused=true;
    }
    el.onblur=function(){
       focused=false;
    }
    
    function thirdFunction(){
       if(focused){...}else{...}
    }
    </script>

  7. #7
    Mmm... stavo provando a fare qualcosa di simile, ma non ho ancora molta familiarità con lo javascript, ho messo nell'html
    <button id="bottone" onblur="this.focused=false" onfocus="this.focused=true">bottone</button>
    Però non ho capito una cosa... posso creare nuovi attributi per le variabili? posso usare "this.variabile" per definire una nuova variabile associata all'elemento relativo?

    In ogni caso mi sa che il "onblur" di un elemento viene invocato a qualche ciclo di clock di distanza dall'"onfocus" del successivo, quindi nel momento in cui chiamo una funziona all'onblur di un elemento quello successivo non è ancora onfocus, e quindi mi dice che nessun elemento è onfocus, ho provato a mettere un setTimeout(function(),time), così da dare tempo al secondo elemento di trovarsi onfocus, ma non funziona nemmeno così...

    EDIT: sembra 'na cazzata fare 'sta cosa e invece si sta rivelando un casino XD

  8. #8
    Jp Fiddle - Demo
    Sono riuscito a fare questo, c'ha due variabili (che fortunatamente mi servono solo per questi due elementi) che aggiorno ad ogni onfocus e onblur del textfield e del button...

    Però come avevo notato c'è un istante in cui nessun elemento è onfocus, lasciando il textfield, clickando sul pulsante o premendo TAB si passa da: text/button = true/false >> false/false >> false/true.

    Quell'istante in cui entrambi sono false mi frega... Ho provato con un setTimeout ma non funziona comunque...

    Vi viene in mente un modo per dare un delay che può dare il tempo alla pagina di passare l'onfocus dal textfield al button?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.