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

    jquery - problema da principiante

    salve a tutti,
    sto passando da prototype a jquery e non riesco più a far funzionare una cavolatina del menu:

    questo è l'html del menu
    codice:
    <ul id="NewTopNav">
        <li onmouseout="mclosetime()" onmouseover="mopen('divCat_44')">Bimbo
            <div style="visibility: hidden;" id="divCat_44">
            Abbigliamento
            Scarpe
            </div>
        
        <li onmouseout="mclosetime()" onmouseover="mopen('divCat_46')">Donna
            <div style="visibility: hidden;" id="divCat_46">
            Maglie
            Pantaloni
            Scarpe
            </div>
        [/list]
    e queste sono le funzioni jquery:
    codice:
    function mopen(id)
    {	
    	// cancel close timer
    	mcancelclosetime();
    
    	// close old layer
    	if(ddmenuitem != 0) 
    		$("#".ddmenuitem).attr("style","visibility:hidden");
    
    	// get new layer and show it
    	ddmenuitem = id;
    	$("#".ddmenuitem).attr("style","visibility:visible");
    }
    // close showed layer
    function mclose()
    {
    	if(ddmenuitem != 0) 
    		$("#".ddmenuitem).attr("style","visibility:hidden");
    }
    quindi all'evento "onmouseover" dovrebbe farmi vedere il sottomenu, ma non funziona...
    qualcuno riesce ad aiutarmi?

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    la concatenazione in js vuole il '+' non il punto

    $("#" + ddmenuitem)

    (il codice comunque è migliorabile / ottimizzabile in diversi modi)
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  3. #3
    grazie mille!
    ovviamente era un errore da meno che principiante (in teoria questa avrei dovuto vederla... )

    tutti i suggerimenti su come migliorare il codice sono ben accetti!

  4. #4
    be potresti evitare di scrivere codice javascript direttamente nel codice è sfruttare classi o id per la semantica della pagina, successivamente tramite jQuery impostare il comportamento dei vari oggetti, per capirci:

    codice:
    <ul id="NewTopNav">
        <li id="cat44">[/list]
    poi in jQuery potresti fare cosi (una delle mille soluzioni che questo fantastico framework mette a dispozione):
    codice:
    $('#NewTopNav li').hover(function() {
        // Fai quello che devi.
        $(this).show();
    });
    Ovviamente ne guadagni in pulizia del codice e se ci penso hai modo di organizzare davvero molto bene la logica lato client che deve essere applicata alle pagine
    Chi sbaglia, apprende meglio di chi non ha mai commesso errori.
    DOT.NET Addicted since 2006 (My Blog)

  5. #5
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    inanzitutto si potrebbe pensare ad una marcatura tale da non richiedere per nulla l'uso di javascript in modo da sfruttare la gestione dell'hover via css

    altrimenti si potrebbe usare sempre javascript anche se ovviamente ciò comporta uno sforzo maggiore per trovare una soluzione unobtrusive (che succede se javascript non è attivo?) performante sia per la marcatura (tutti quegli eventi online e id sono evitabili) sia per il javascript (si potrebbe sfruttare l'event delegation e il metodo hover() di jquery per esempio)
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  6. #6
    grazie mille!
    comincerò da subito ad applicare i vostri consigli

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.