Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453

    [js] problemi col focus

    ciao a tutti...

    in un gioco che ho fatto genero degli embeds facendo delle document.write: su questi embeds dopo chiamo delle Play() per riprodurre dei suoni...

    il problema è questo: per iniziare il gioco, una volta generati gli embeds, si preme invio. Purtroppo la pressione di invio, su firefox, non fa partire il gestore associato (start_game()), bensì causa la riproduzione di un suono, penso perchè il focus rimane su uno degli embeds creati... Se clicco in un punto qualsiasi della pagina e ripremo invio funziona, se non lo faccio ad ogni pressione continua a riprodurmi un suono...

    Su IE accade la stessa cosa, premendo invio parte un suono, però dopo averlo riprodotto parte anche il gestore appropriato..

    Ho provato a smanettare con focus() e blur() per togliere il focus agli embeds e darlo al div che contiene il gioco, ma con scarsi risultati... ho fatto oggetto_embed_i.blur() dopo la creazione di ciascun embed i-esimo, oppure self.focus(), o document.getElementById('altro_div').focus(), ma continua a comportarsi male...

    potete darmi una dritta? penso sia una scemata...

    grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Io al secondo embeds mi sono perso, forse postando un link alla pagina pubblica si capisce meglio.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    eh non ce l'ho la pagina sul web....

    cerco di spiegarmi meglio:

    - apro il gioco
    - premo un tasto ('s') per abilitare i suoni: parte una funzione che crea un certo numero di embeds, su cui durante il gioco chiamerò delle Play() per riprodurre dei suoni
    - dopo vorrei premere INVIO, a cui è associata una funzione start_game() che fa partire il gioco... la funzione su firefox non parte, bensì premendo INVIO parte il play di uno degli embeds, credo perchè, dopo averlo creato, gli rimane il focus "addosso"

    Mi serve un modo per dare il focus a un altro div, se il problema è effettivamente il focus, in modo che premendo INVIO parta il gestore associato a tale tasto, che mi fa partire il gioco. (ho già provato i metodi scritti su... forse il problema non è il focus?) Ora come ora altrimenti se premo invio ripetutamente non faccio altro che riprodurre un suono più volte. Devo cliccare in un punto vuoto della pagina e premere INVIO perchè il gioco possa iniziare....

    spero di esermi spiegato meglio...!

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    In questo caso prova a mettere script e pagine html (no php o codice lato server, confonde e non tutti lo conoscono) l'operazione si complica di molto non potendo simulare nulla, ma forse qualcuno vedendo il codice e la pagina identifica l'errore.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    non posso postare il tutto, sono un bel po' di files anche js, c'è dietro un bel po' di codice.. la funzione che interessa è questa, associata al gestore dell'evento OnKeyDown relativo al tasto 's'


    codice:
    function enable_sound(){
    			
    		var players_exists = document.getElementById("player0");
    			
    		if(players_exists == null){ //se non sono già stati creati gli embeds, li creo
    				var sound_control = document.getElementById("sound_control");
    				
    				for(var i = 0; i < 4; i++){
    					var player_i = document.createElement("embed");
    					player_i.setAttribute("id", "player"+i);
    					player_i.setAttribute("src", "sound/theme"+i+".wav");
    					player_i.setAttribute("autostart", "false");
    					player_i.setAttribute("height", "0px");
    					player_i.setAttribute("width", "0px");
    					sound_control.appendChild(player_i);
    					//player_i.blur();
    				}
    			
    	}
    	//self.focus();
    	//document.getElementById('game_area').focus();
    	
    }
    eseguita quella funz, credo rimanga il focus sul tasto play di uno degli embeds, cosìcchè premendo INVIO parte il play invece della funzione gestore associata a INVIOù

    EDIT: sound_control è un div, o uno span...

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Prova a settare gli attributi cosi:
    codice:
    player_i. id="player"+i;
    					player_i.src="sound/theme"+i+".wav";
    					player_i.autostart="false";
    					player_i.height="0px";
    					player_i.width= "0px";
    la funzione come la richiami?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente di HTML.it L'avatar di Kilin
    Registrato dal
    Mar 2003
    Messaggi
    453
    fa la stessa cosa, con la differenza che autostart=false non funziona, riproducono tutti appena creati..

    la funzione la richiamo così:
    codice:
    function init(){ // onload
    //...
    		if(window.Event && (!document.documentMode || document.documentMode!='8'))
    			window.onkeydown = commands;
    		else
    			document.onkeydown = commands; 
    //...
    }
    
    function commands(e){ // gestore evento keydown
    
    		e = (!e) ? window.event : e;
    		var tasto = (e.which != null) ? e.which : e.keyCode;
    		//...
    		if(tasto == 83) /* codice tasto 's' */
    				enable_sound();
    //..
    grazie..

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.