Poslao: 14 Mar 2009 23:50
|
offline
- Wraith
- Ugledni građanin
- Pridružio: 22 Jun 2006
- Poruke: 409
|
Koliko nesrećan naslov, toliko i moje pitanje.
Naime, imam stranicu, na koju želim da "nakačim" svoju skriptu putem Greasemonkeya. Problem je što je ta stranica dinamička, i ono što ja želim da menjam se ne loaduje odmah:
// skripta za zamenu
function changeTheWorld( idRef, val ) {
// da li browser podrzava ovu fju
if(!document.getElementById ) return;
// trazenje inputa
var inputobj = document.getElementById( idRef );
if( inputobj ) {
// update
inputobj.value = val;
}
}
// kacenje svih eventova
function attachBehaviors() {
// da li browser podrzava ovu fju
if(!document.getElementById ) return;
// trazenje linka koji menja input
var linkObj = document.getElementById( 'link' );
if( linkObj ) {
// kacenje onclick eventa
linkObj.onclick = function() {
changeTheWorld( 'where', 'Ovo se ispisuje u input field' );
};
}
var mojdiv = document.getElementById("wi-where");
mojdiv.innerHTML = '<input type="text" name="location" id="where" value=""/><a id="link">kad se ovo klikne trebalo bi da se zameni tekst u inputu</a>'
}
// ovo tera browser da pozove sve kad se ucita prozor, u cemu i mislim da je problem, jer js injectuje ovo naknadno
window.onload = function() {
attachBehaviors();
};
i sa ovim ja lepo dobijem input u tom divu i link pored, ali kad ga kliknem u inputu se ne pojavi tekst 'Ovo se ispisuje u input field', a kad u html-u napravim (statički) <input type="text" name="location" id="where" value=""/><a id="link">kad se ovo klikne trebalo bi da se zameni tekst u inputu</a>
bez ove dve linije u skripti
var mojdiv = document.getElementById("wi-where");
mojdiv.innerHTML = '<input type="text" name="location" id="where" value=""/><a id="link">kad se ovo klikne trebalo bi da se zameni tekst u inputu</a>'
onda sve lepo radi, tako da je problem do "kačenja" i aktiviranja eventa, samo što ja ne znam da ga rešim, niti znam da li je moguće rešiti ga, ali se nadam da jeste. Kako da nateram ovo da proradi?
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 15 Mar 2009 00:39
|
offline
- igor86
- Stručni saradnik
Web programiranje
- Pridružio: 24 Maj 2006
- Poruke: 1633
|
Evo ukratko
function changeTheWorld(idRef, val) {
document.getElementById(idRef).value = val;
}
function attachBehaviors(sIdevent, sIdWhere, sText) {
document.getElementById(sIdevent).onclick = function(){changeTheWorld(sIdWhere, sText);};
}
function writeContent(){
document.getElementById("wi-where").innerHTML = '<input type="text" name="location" id="where" value=""/><a id="link">kad se ovo klikne trebalo bi da se zameni tekst u inputu</a>'
}
window.onload = function() {
writeContent();
attachBehaviors('link', 'where', 'Ovo se ispisuje u input field');
};
|
|
|
|
Poslao: 15 Mar 2009 00:42
|
offline
- bobby
- Administrator
- Pridružio: 04 Sep 2003
- Poruke: 24135
- Gde živiš: Wien
|
Probaj
function onClick ()
{ changeTheWorld( 'where', 'Ovo se ispisuje u input field' ); }
linkObj.onClick = new onClick;
Ovako je mnogo ruzan kod, ali vidi za pocetak da li radi uopste.
Dopuna: 15 Mar 2009 0:42
@igor86
Moze li to da radi bez instanciranja funkcije (new) ?
|
|
|
|
|
Poslao: 15 Mar 2009 15:57
|
offline
- igor86
- Stručni saradnik
Web programiranje
- Pridružio: 24 Maj 2006
- Poruke: 1633
|
Ne znam sta ti je konkretna namjena, ali to se moze jos sazetije napisati,
recimo
function atE(oSender, sIdWhere, sText) {
oSender.onclick = function(){document.getElementById(sIdWhere).value = sText};
}
i u samo u link stavis recimo
onmouseover="atE(this, 'idWhere', 'Init value');"
naravno mora da radi za oba slucaja, mislim i dinamicki kada se generise content;
|
|
|
|