Visualizzazione risultati 1 fino 3 di 3

Discussione: jQuery e funzioni personalizzate: su cosa si basa this?

  1. #1
    Guest

    Predefinito jQuery e funzioni personalizzate: su cosa si basa this?

    Ho trovato un plug-in molto utile, ma non riesco a capire come personalizzarlo per poterlo implementare in base alle mie esigenze.

    Il plug ha questa struttura:
    Codice:
    (function ($)
    {
    	$.extend({
    		name: function(selector, callback)
    		{
    			// Listen for any anchor tag call
    			$(selector).live('click', function (e)
    			{
    				// prevent the default reloading the page
    				e.preventDefault();
    
    				var new_var = this.href;
    			});
    
    			callback();
    		}
    	});
    })(jQuery);
    Quindi, avendo un codice simile (che attualmente non funziona come dovrebbe):
    Codice:
    var element	= 'div a';
    var content	= $('#content');
    
    $.name(element + ':not([href^=http]', function(other_var)
    {
    	if (!($(element).hasClass('active')))
    	{
    		$(element + '.active').removeClass('active');
    
    		content.load(other_var);
    	}
    
    	/*
    	questa è una stringa esemplificativa su quali elementi devo lavorare
    	*/
    	$(this).addClass('active');
    
    	return false;
    });
    come dovrei fare per poter assegnare this al primo valore passato alla funzione name piuttosto che a other_var per poterci lavorare?


  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Puoi usare il metodo call delle funzioni (in particolare su callback).
    Codice:
    (function ($)
    {
    	$.extend({
    		name: function(selector, callback)
    		{
    			// Listen for any anchor tag call
    			$(selector).live('click', function (e)
    			{
    				// prevent the default reloading the page
    				e.preventDefault();
    
    				var new_var = this.href;
    			});
    
    			callback.call(selector); // cerca su google call o apply per maggiori informazioni, puoi anche passare altre variabili alla funzione.
                            // Il primo argomento corrisponde a "this"
    		}
    	});
    })(jQuery);
    Così che potrai fare:
    Codice:
    $.name(element + ':not([href^=http]', function(other_var)
    {
    	if (!($(this).hasClass('active')))
    	{
    		$(this + '.active').removeClass('active');
    
    		content.load(other_var);
    	}
    
    	/*
    	questa è una stringa esemplificativa su quali elementi devo lavorare
    	*/
    	$(this).addClass('active');
    
    	return false;
    });
    Supponendo di aver capito bene, ma anche se non fosse così, credo che dovresti sempre usare call o apply.
    Ultima modifica di javascripter : 06-11-2011 alle ore 12.55.32

  3. #3
    Guest

    Predefinito

    Grazie per il consiglio, ora funziona parzialmente.

    Il problema, ora, è valorizzare il "this" con l'elemento cliccato e suppongo sia questo:
    Codice:
    $(selector).live('click', function (e)
    Infatti, passando la variabile selector, ricevo solo la stringa e la prima condizione
    Codice:
    if (!($(this).hasClass('active')))
    restituisce sempre true nonostante abbia la classe active ed elabora il $.load e l'eliminazione della classe, ma non assegna all'elemento cliccato la nuova classe active.

    Mi sono spiegato o no?

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •