View Full Version : [javascript] Oggetti e eventi
Salve a tutti,
sto realizzando un sito con funzionalità javascript e ho il seguente problema:
sto definendo un oggetto che sarebbe l'oggetto che definisce una Form che sto creando dinamicamente, tra i vari campi c'è il bottone che devo creare e questo sarebbe il codice:
function Oggetto(mark) {
blablabla;
....;
this.invia=document.createElement("input");
this.invia.setAttribute("type","button");
this.invia.setAttribute("value","Aggiungi");
this.invia.onclick=function() {
alert(this);
addObj(mark,this);
};
}
Il punto è che vorrei che quando si preme il bottone venisse mandata mark che è una variabile già esistente e non ci sono problemi e poi this che vorrei fosse l'intero oggetto che sto creando. Il problema è che tramite l'alert che ho messo una volta all'interno della funzione che sto associando all'evento onclick "this" diventa il bottone stesso e non più il mio oggetto precedente. Come posso risolvere? Io tramite il mio oggetto avrei voluto risalire agli altri campi interni al form nel metodo addObj ma se mi passa solo il bottone non so più come risolvere. Non c'è qualche modo per far si che this sia il mio oggetto di partenza?
Salve a tutti,
sto realizzando un sito con funzionalità javascript e ho il seguente problema:
sto definendo un oggetto che sarebbe l'oggetto che definisce una Form che sto creando dinamicamente, tra i vari campi c'è il bottone che devo creare e questo sarebbe il codice:
function Oggetto(mark) {
blablabla;
....;
this.invia=document.createElement("input");
this.invia.setAttribute("type","button");
this.invia.setAttribute("value","Aggiungi");
this.invia.onclick=function() {
alert(this);
addObj(mark,this);
};
}
Il punto è che vorrei che quando si preme il bottone venisse mandata mark che è una variabile già esistente e non ci sono problemi e poi this che vorrei fosse l'intero oggetto che sto creando. Il problema è che tramite l'alert che ho messo una volta all'interno della funzione che sto associando all'evento onclick "this" diventa il bottone stesso e non più il mio oggetto precedente. Come posso risolvere? Io tramite il mio oggetto avrei voluto risalire agli altri campi interni al form nel metodo addObj ma se mi passa solo il bottone non so più come risolvere. Non c'è qualche modo per far si che this sia il mio oggetto di partenza?
Si', il modo c'e'.
Avevamo avuto lo stesso problema, risolto mediante la call a
Function.createDelegate
Ma non ti so dire ora se e' nativa in javascript
oppure se e' generica e basta aggiungere una libreria
oppure se e' magari limitata solo ad ASP.net
Nel tuo caso il codice sarebbe qualcosa di simile a
this.invia.onclick=Function.createDelegate(mark, ProcessClick);
...
//e nel codice dell'oggetto di tipo mark, chiamato qui markType
markType.ProcessClick = function(){
// Qui siamo sicuri che this e' proprio l'istanza (come mark), grazie alla createDelegate
alert(this);
this.addObj();
}
In pratica la Function.createDelegate accetta 2 parametri.
Il primo e' il contesto, che sara' il "this" della funzione quando verra' eseguito
Il secondo e' il metodo che dovra' essere eseguito, il cui this sara' appunto il primo parametro.
Se alla this.addObj serve anche come parametro il pulsante che avevi generato prima, allora e' anche possibile passare parametri al delegate, ma devo chiedere all'esperto...
Innanzitutto grazie..
e' un po elaborata come soluzione.. forse mi conviene optare utilizzando il DOM ossia trattandosi il button invia di un bottone di una form potrei usare this.parentNode (dove this sarebbe quindi il bottone stesso) ottenendo così l'oggetto form e accedendo ai suoi campi tramite le regole DOM. Forse è la cosa che più mi conviene.
Innanzitutto grazie..
e' un po elaborata come soluzione.. forse mi conviene optare utilizzando il DOM ossia trattandosi il button invia di un bottone di una form potrei usare this.parentNode (dove this sarebbe quindi il bottone stesso) ottenendo così l'oggetto form e accedendo ai suoi campi tramite le regole DOM. Forse è la cosa che più mi conviene.
Be, allora se si tratta di trovare una soluzione "pezza" puoi sempre scrivere
function Oggetto(mark) {
blablabla;
....;
this.invia=document.createElement("input");
this.invia.setAttribute("type","button");
this.invia.setAttribute("value","Aggiungi");
this.invia.Context = this;
this.invia.onclick=function() {
alert(this.Context);
addObj(mark,this.Context);
};
}
E all'interno della funzione, essendo this il pulsante, this.Context sara' il this precedente settato durante la costruzione. Mi rendo conto di avere scritto afroestruscherie (la lingua umana non e' il modo migliore che abbiamo per spiegare processi), ma se leggi l'esempio il tutto dovrebbe quadrare.
Cosi' almeno per una volta usi Javascript con la sua caratteristica di linguaggio dinamico poco StrongType (Context ovviamente non e' una proprieta' di un pulsante, che viene creata al volo giusto a seguito dell'assegnazione)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.