Domanda

Ho creato un controllo Web in ASP per l'utilizzo in integrazione con Telligent CommunityServer. Il controllo è scritto in ASP con circa 10 linee di C # backend per controllare la visibilità degli elementi dell'interfaccia utente in base alle autorizzazioni, ma direi che il 90% delle funzionalità è straight-up Javascript.

Il controllo funziona in modo bello, fino a cadere due istanze del controllo sulla stessa pagina -. In quanto fanno riferimento la stessa identica funzioni Javascript, solo uno opere di controllo

Come posso prendere questa funzionalità che ho, questo 1200 righe di JavaScript, e fare in modo che ogni istanza del controllo può fare riferimento a sua ogni istanza unica di Javascript?

È stato utile?

Soluzione

Se il problema è semplicemente scoprire quale elemento HTML ha attivato un evento quindi che è facile - è passato a voi nei argomenti dell'evento. (È possibile quindi ottenere il suo elemento principale, naturalmente.) Quindi, se ho capito bene il problema che hai le funzioni JavaScript che fanno riferimento alcuni controlli, che vengono duplicati?

Non credo che ci sia alcuna soluzione magica qui: devi solo fare gli ID unici. Se non stai utilizzando i controlli lato server (che gestiscono questo automaticamente per voi) allora si potrebbe usare un po 'sul lato server prefisso o suffisso generati, ad esempio.

<input id="<%= ParentControlId %>_mytextbox" type="text" />

dove ParentControlId è un ID univoco del controllo padre (si potrebbe utilizzare Control.ID se non ti dispiace lunghe ID).

Naturalmente, si dovrebbe cercare di ri-utilizzare le funzioni JavaScript piuttosto che duplicare per ogni istanza di controllo. Se si sta utilizzando l'approccio ID generato dal server dovrete passare intere ID intorno. Se si sta utilizzando l'approccio del prefisso si può semplicemente passare intorno il prefisso.

Altri suggerimenti

Come è il vostro controllo ricevendo il JavaScript nella pagina, allora? Iniettando direttamente? Si sta utilizzando una ScriptReference? Il browser dovrebbe caricare solo il JS una volta, se entrambi i controlli referenziati quello stesso JS (stesso URL).

Inoltre, è il vostro JS scritta in termini di qualsiasi vecchio esempio? per esempio. non si dispone di funzione come Load (oControlName) o che la funzione Load () hanno un nome istanza hard-coded al suo interno?

IMO, cercando di ottenere più 'JavaScript' non è la via da seguire -. Refactoring del codice può ottenere la vostra risposta più veloce

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top