Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    6

    problemi con l'"onClick" e le funzioni...

    Salve. Sono nuovo del forum, ma sono ormai anni che bazzico il sito, particolarmente le guide e gli articoli dedicati al Javascript, html e css... ma bando alle ciance, vado a esporvi il mio problema.

    Come (suppongo) molti di voi che (ab)usano Facebook (particolarmente i giochini tipo FarmVille :P), sono costantemente irritato da spam di 'amici' che stringono amicizia con sconosciuti... non potendo semplicemente nascondere tali 'amici' (perchè mi servono i loro gift/feed su FrontierVille :P), mi sono risolto a usare GreaseMonkey (sono un utente di Firefox) per creare un pulsante che nascondesse (con un poco elegante 'display:none' :P) tali notifiche dalla mia homepage... un breve studio del codice di Face mi ha portato al seguente script
    codice:
    // ==UserScript==
    // @name Nascondi Amicizie
    // @include http://www.facebook.com*
    // ==/UserScript==
    
    //alert('Caricamento Script: Effettuato');
    
    function NascondiAmici()
    {
    //	alert('Funzione Inizializzata. Numero di <h6> nella pagina: '+document.getElementsByTagName('h6').length);
    	for (h6=0; h6<document.getElementsByTagName('h6').length; h6++)
    	{
    		for (h6c=0; h6c<document.getElementsByTagName('h6')[h6].childNodes.length; h6c++)
    		{
    			if (document.getElementsByTagName('h6')[h6].childNodes[h6c].nodeValue == ' hanno stretto amicizia con ') 
    			{
    //				alert('Eccolo qua!');
    				document.getElementsByTagName('h6')[h6].parentNode.parentNode.style.display = 'none';
    			}
    		}
    	}
    	
    }
    
    var pulsante = document.createElement('input');
    pulsante.setAttribute('type','button');
    pulsante.setAttribute('value','Nascondi amicizie');
    pulsante.setAttribute('onClick','NascondiAmici();');
    //pulsante.setAttribute('onClick','alert("Adesso funzioni, maledetto?! Io ti uccido!");');
    
    function CreaPulsante()
    {
    //	alert('Funzione Inizializzata. Numero di <h2> nella pagina: '+document.getElementsByTagName('h2').length);
    	for (h2=0; h2<document.getElementsByTagName('h2').length; h2++) 
    	{
    		
    //		alert('Analisi dell<h2> n° '+h2+'. Numero di elementi figli: '+document.getElementsByTagName('h2')[h2].childNodes.length);
    		for (h2c=0; h2c<document.getElementsByTagName('h2')[h2].childNodes.length; h2c++) 
    		{
    //			alert('<h2> n° '+h2+'. Elemento figlio n° '+h2c+': '+document.getElementsByTagName('h2')[h2].childNodes[h2c].nodeValue);
    			if (document.getElementsByTagName('h2')[h2].childNodes[h2c].nodeValue == 'Notizie') 
    			{
    //				alert('TROVATO!!!');
    				document.getElementsByTagName('h2')[h2].appendChild(pulsante);
    			}
    		}
    	}
    }
    
    window.onLoad(CreaPulsante());
    (ignorate gli 'alert', sono le mie verifiche per vedere se il codice funziona ^^')
    ...il problema è che tutto funziona bene fino alla creazione del pulsante a fianco a 'Notizie', ma quando si tratta di premerci sopra e attivare la funzione (che ho gia verificato essere funzionale nel nascondere le notifiche indesiderate), l'onClick semplicemente non si attiva! (o meglio, se cerco di fargli richiamare un semplice alert, tutto ok, ma se richiamo la funzione NascondiAmici, nulla, è come se non avessi impostato il paramentro onClick)(in altre parole se utilizzo il pulsante.setAttribute commentato invece di quello in chiaro)


    ...sono perplesso...

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Prova cosi:
    pulsante.onclick=function(){NascondiAmici()};
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    6
    no... con quel codice si rifiuta addirittura di creare il pulsante (l'esecuzione si interrompe a quella riga, non viene neanche eseguita la funzione CreaPulsante...)


    p.s. non l'ho detto ma so che potrebbe essere rilevante... uso firefox 3.5.10


    (gia che ci sono, qualcuno ha idea come gestire l'onLoad di una pagina php? la home di facebook, ad esempio, esegue il window.onLoad prima di aver caricato le notizie... irrilevante in questo caso, ma fastidioso, e non so come gestirlo - anche perchè i miei setTimeout sembra abbiano lo stesso problema dei miei onClick, accettano gli alert ma non le funzioni u.u)

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    6
    risolto ^^

    la sintassi corretta è:
    codice:
    pulsante.addEventListener('click', NascondiAmici, false);
    (addEventListener perchè l'onclick è un Event Handler non un Attribute)
    ('click' perchè pare sia quella la sintassi corretta per l'event listener ?.?)
    (NascondiAmici senza parentesi perchè pare sia un function pointer)
    (false nn ho capito bene cos'è ma dicono che il true faccia casini ^^')

    grazie a tutti per l'aiuto ^^

    p.s. se a qualcuno potesse interessare, il codice dello script (ora perfettamente funzionante e un po più pulito - e pronto a essere espanso con nuove funzioni ^^) è
    codice:
    // ==UserScript==
    // @name Nascondi Amicizie
    // @include http://www.facebook.com/*
    // ==/UserScript==
    
    
    // Funzione per nascondere le notifiche indesiderate
    function Nascondi()
    {
    	for (h6=0; h6<document.getElementsByTagName('h6').length; h6++)
    	{
    		for (h6c=0; h6c<document.getElementsByTagName('h6')[h6].childNodes.length; h6c++)
    		{
    			if (document.getElementsByTagName('h6')[h6].childNodes[h6c].nodeValue == ' hanno stretto amicizia con ') 
    			{	
    				document.getElementsByTagName('h6')[h6].parentNode.parentNode.style.display = 'none';
    			}
    			else if (document.getElementsByTagName('h6')[h6].childNodes[h6c].nodeValue == ' ha stretto amicizia con ')
    			{
    				document.getElementsByTagName('h6')[h6].parentNode.parentNode.style.display = 'none';
    			}
    //			else if (document.getElementsByTagName('h6')[h6].childNodes[h6c].nodeValue == ' piace ')
    //			{
    //				document.getElementsByTagName('h6')[h6].parentNode.parentNode.style.display = 'none';
    //			}
    //			else if (document.getElementsByTagName('h6')[h6].childNodes[h6c].nodeValue == ' piacciono ')
    //			{
    //				document.getElementsByTagName('h6')[h6].parentNode.parentNode.style.display = 'none';
    //			}
    		}
    	}
    }
    
    // Funzione per creare i vari pulsanti
    function Crea()
    {
    	var Menu = document.createElement('div');
    	Menu.style.position = 'fixed';
    	Menu.style.display = 'block';
    	Menu.style.left = '20px';
    	Menu.style.top = '60px';
    	var Lista = document.createElement('ul');
    	var Uno = document.createElement('li');
    	var UnoImg = document.createElement('img');
    	UnoImg.setAttribute('src','http://t3.gstatic.com/images?q=tbn:f2KjEoJEKDV3AM:http://www.promobit.com/images/servi...-analytics.png');
    	UnoImg.addEventListener('click', Nascondi, false);
    	var UnoText = document.createTextNode('  Nascondi le notifiche di amicizia');
    	document.getElementsByTagName('body')[0].appendChild(Menu).appendChild(Lista).appendChild(Uno).appendChild(UnoImg).parentNode.appendChild(UnoText);	
    }
    
    // Funzione per verificare di essere nella pagina giusta e lanciare lo script
    function Verifica()
    {
    	for (h2=0; h2<document.getElementsByTagName('h2').length; h2++) for (h2c=0; h2c<document.getElementsByTagName('h2')[h2].childNodes.length; h2c++) if (document.getElementsByTagName('h2')[h2].childNodes[h2c].nodeValue == 'Notizie') Crea();
    }
    
    // ...e finalmente, inizializzo la funzione
    document.onLoad(Verifica());

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.