Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199

    Jquery metodo live/delegate/on

    Ciao a tutti!

    Io ho questo:
    codice:
    <script> $("#prd_txt").live("focus", function() { 
    CKEDITOR.replace( 'prd_txt', { 
    height: '103px', 
    width: '600px', 
    startupShowBorders: true, 
    resize_enabled: false, 
    toolbarCanCollapse:false 
    }); 
    }); 
    </script>
    Con questo script io riesco a sostituire una textarea (prd_txt) che si genera sulla pagina A tramite un richiamo AJAX che elabora i risultati PHP nella pagina B, con il più comodo CKEDITOR.
    Purtroppo ho 3 problemi:
    1- il metodo live è deprecato...il che dovrebbe essere una cosa brutta!
    2- per fare la sostituzione devo necessariamente mettere un evento, mentre sarebbe più "carino" se cambiasse appena caricata nella pagina.
    3- (questa è difficile da spiegare) mettiamo che io ho tanti link nella pagina A, ognuno di questi, sempre tramite il processo di sopra AJAX/PHP, mi da un certo testo nella textarea in questione (che naturalmente ha un solo name e un solo ID per tutti). Però accade che caricato il primo valore e fatto FOCUS sulla textarea essa si cambia. Senza fare refresh clicco su un secondo link, la textarea ritorna ad essere una normale textarea, ma al nuovo focus questa scompare! Il motivo, ho dedotto, dovrebbe essere proprio che il nome e l'ID è uguale a tutti e questo gli crea qualche casino!

    Per risolvere il primo problema stavo studiando il metodo ON e DELEGATE (http://www.html.it/articoli/jquery-m...ve-e-delegate/), ma non sono riuscito a capire come usarli nel mio caso.
    Per il secondo sono certo che c'è una soluzione abbastanza semplice, ma tutti gli eventi che ho provato non sono riusciti.
    Per il terzo ho provato di tutto, ma questo risultato è il migliore che ho avuto.

    Ho la sensazione che se riuscissi a cambiare con ON probabilmente risolvo anche gli altri.
    Potreste dirmi la vostra in merito?

    Grazie mille e buona serata a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Per effettuare la sostituzione della textarea con il CKEDITOR al caricamento della pagina ti basta inserire il codice postato(togliendo la gestione dell'evento focus) nel document ready.

    codice:
    $(function(){
    CKEDITOR.replace( 'prd_txt', { 
    height: '103px', 
    width: '600px', 
    startupShowBorders: true, 
    resize_enabled: false, 
    toolbarCanCollapse:false 
    }); 
    });
    Per quanto riguarda il metodo on va impostato diversamente dal live, puoi fare cosi:

    codice:
    $(document).on("focus", "#prd_txt", function() { 
    CKEDITOR.replace( 'prd_txt', { 
    height: '103px', 
    width: '600px', 
    startupShowBorders: true, 
    resize_enabled: false, 
    toolbarCanCollapse:false 
    }); 
    });

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    Grazie VIndav, generoso e chiaro come sempre!!!
    Il primo metodo va bene se la textarea è già presente nella pagina, ma "arrivando" da altre pagine necessita in ogni modo del metodo live o on.
    Il secondo...c'ero andato così vicino...invece di
    $(document).on("focus", "#prd_txt", function() {
    avevo scritto:
    $(#div X).on("focus", "#prd_txt", function() {
    dove div X è quello che contiene la textarea...non avevo pensato in grande!!!

    In ogni caso ora che ho messo on (e funziona) mi sento un pochino più tranquillo per eventuali incompatibilità future. Tuttavia non ho risolto il problema del focus, anche nella tua soluzione devo sempre metterlo a focus per cambiarlo.
    D'altro canto ho risolto invece il punto 3 del mio problema...mettendo il div tipo lightbox (solo per rendere l'idea) ho fatto si che quando si va a chiudere fa automaticamente il refresh della pagina.

    Per tornare al problema del focus...beh, è trascurabile, solo una questione grafica, ma tanto è un back-end e probabilmente lo gestirò solo io...magari sarebbe utile sapere se si può ovviare al problema per eventuali riutilizzi futuri!


    Grazie mille ancora mille volte!!! CIAO

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    quindi la textarea non è presente nella pagina iniziale, se non ho capito male viene caricata da una chiamata ajax, questa chiamata ajax quando viene effettuata? al click su uno dei link? Rispiega il punto 3 che non mi è chiaro, probabilmente si può fare a meno di effettuare il refresh della pagina.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    esattamente come hai detto tu.
    Io clicco su uno dei link che mi vengono generati da PHP in base al DB.
    A seconda di quale clicco mi esce fuori, tramite la chiamata AJAX, questo div "in risalto" con la txtarea.
    Se non ci fosse il refresh, nel momento che apro un secondo link (dopo aver fato focus sulla prima textarea) e facendo focus su questa seconda textarea essa scompare!
    Credo che se si risolvesse il problema del focus si risolverebbe anche questo, no?

    Grazie ancora, ciao.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    ma scusa non puoi inserire tutta l'elaborazione(chiamata ajax e sostituzione della textarea con il CKEDITOR) nel funzione che gestisce il click del/i link? dopo aver effettuato la chiamata ajax effettui subito la conversione senza aspettare il focus. Poi parli di "seconda textarea" quindi c'è ne sarà piu di una? non viene "sostituita" la prima textarea ma ne viene creata un altra?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    199
    ehehe...penso che tu mi sopravvaluti un pochino quando dici di mettere l'AJAX nella funzione che gestisce i link...cmq ora vado a provarci!!!
    Quando ho parlato della seconda textarea intendevo dire quella generata dal secondo link. Ogni link ha solo una textarea.

    Grazie per l'interessamento!


    AGGIORNAMENTO:

    Ho provato, dozzinalmente, ad aggiungere tutta la funziona del CKeditor alla fine di quella AJAX ma senza risultati...ancora non abbastanza abilità con queste cose, però, mentre lo facevo, mi è venuta in mente un'altra idea, solo un aggiramento del problema del focus in realtà, ovvero quella di richiamare la funzione CKeditor quando apro il div con onmouseover. Facendo così appare istantaneamente (a meno che non si sta fermi ) . Però il refresh è sempre necessario anche i questo caso.
    Ti dico che per me va bene così, però, se ti ci vuoi divertire e dedicarci un po' di tempo, ti scrivo il codice AJAX (il CKEDITOR sta sopra):
    codice:
    function showModPrd(prd_id)
    { 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    }
     else
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { document.getElementById("prodotti_2").innerHTML=xmlhttp.responseText; 
    } 
    }
     xmlhttp.open("GET","../php/mod_prd.php?prd_id="+prd_id,true); 
    xmlhttp.send(); 
    }
    Ancora una volta grazie per la pazienza e il supporto!!!

    Ciao

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.