354 messaggi dal 13 marzo 2013
Mi scuso se riporto il topic in alto(se non posso farlo chiedo scusa) ma in questi giorni di ricerche non sono riuscito s risolvere nulla,il mio problema é quello di poter usare una funzione Javascript su un controllo di un FormView anche se questo cambia modalità (passando dalla ReadOnly alla Edit).
Purtroppo non posso usare il this perché dovrei scatenare la funzione su una textbox (o su più) ma alla pressione di un check box
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
purtroppo non ho ben capito la tua situazione. In particolare, non mi è chiaro come la casella possa apparire lato client nonostante si trovi in un template che non è quello attivo.

Vediamo se riesco ad aiutarti lo stesso.

PR17 ha scritto:

scatenare la funzione su una textbox (o su più)

Conoscere l'ID della casella non è l'unico modo per ottenere un riferimento ad essa. La volta scorsa abbiamo visto come usare la parola chiave this, ma in questo caso non possiamo usarla perché l'evento non viene iniziato dalla casella stessa ma da un altro elemento nella pagina.
Se abbiamo difficoltà a recuperare l'ID, possiamo provare con le classi CSS, che non vengono modificate da ASP.NET e che ti saranno utili soprattutto se devi intervenire su più di una textbox alla volta.

In questo esempio ho assegnato una stessa classe CSS a più di una textbox. Al click su un bottone, uso il metodo getElementsByClassName per ottenere un riferimento a tutte quante e modificare il loro sfondo.
http://jsfiddle.net/Xxq7m/

Dato che getElementsByClassName non è supportato dalle vecchie versioni di IE, si preferisce usare una libreria come jQuery che offre una API unica e semplificata per lavorare senza preoccupazioni. Ecco lo stesso esempio di prima usando jQuery.
http://jsfiddle.net/Xxq7m/2/

ciao,
Moreno
Modificato da BrightSoul il 27 ottobre 2013 23.16 -

Enjoy learning and just keep making
354 messaggi dal 13 marzo 2013
ciao,
purtroppo non ho ben capito la tua situazione. In particolare, non mi è chiaro come la casella possa apparire lato client nonostante si trovi in un template che non è quello attivo.


ciao,
scusa ma mi sono spiegato male, la casella deve apparire lato client quando il template è attivo, ma se per recuperarla uso questo codice

textbox_professionista = document.getElementById('<%=motivazione_esposizioneETextBox.ClientID%>');


mi va in errore quando il template non è attivo.
Potrei pensare di utilizzare la soluzione delle classi ma così facendo, se voglio far apparire una sola casella darò il nome della classe solo a quella, giusto?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

PR17 ha scritto:

se voglio far apparire una sola casella darò il nome della classe solo a quella, giusto?

Sì, esatto.
Comunque ora ho capito il problema :) Nel caso tu abbia una sola casella puoi continuare ad usare il getElementById. Devi solo fare in modo che l'istruzione motivazione_esposizioneETextBox.ClientID vada in esecuzione solo quando il template che contiene la casella è quello attivo.
Si può fare in vari modi, eccone uno veloce con codice C# che stampa il clientID solo se il formview è in modalità Edit:
//se il formview non è in modalità edit, l'id sarà vuoto
var idTextboxProfessionista = "<%= formView1.CurrentMode == FormViewMode.Edit ? formView1.FindControl("nometextbox").ClientID : "" %>";

textbox_professionista = document.getElementById(idTextboxProfessionista);

//controllo che il getElementById non abbia restuito null
if (textbox_professionista != null){
  //qui compio delle azioni sulla casella
}


ciao
Modificato da BrightSoul il 28 ottobre 2013 23.42 -

Enjoy learning and just keep making
354 messaggi dal 13 marzo 2013
grazie!
Scusa perché mi dici codice C# se siamo in una funzione Javascript?
11.886 messaggi dal 09 febbraio 2002
Contributi
Perché il ClientID è la proprietà di un controllo ASP.NET che esiste solo lato server. Per leggere il suo valore, quindi è necessaria un'istruzione in C# o in VB.NET.

<%= formView1.CurrentMode == FormViewMode.Edit ? formView1.FindControl("nometextbox").ClientID : "" %>

Questa espressione C# viene valutata lato server, cioè mentre ASP.NET elabora la pagina web richiesta dall'utente. L'output che essa produce va ad incastonarsi nel corpo della funzione javascript, che invece andrà in esecuzione solo in un secondo momento, lato client, quando ormai ASP.NET ha terminato l'elaborazione di pagina.

Quindi tu, con codice lato server, puoi determinare in maniera dinamica tutto quello che verrà inviato al client, dai contenuti HTML alle funzioni javascript, che pure fanno parte di un pagina web.


ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.