Avatar billede masterbp Nybegynder
12. maj 2001 - 12:10 Der er 3 kommentarer og
1 løsning

Fortsat: Ændre indhold i et input felt

Nedenstående kode virker (i IE i hvert fald), men er meget langsom, fordi der skal søges igennem alle elementer i form-objektet for at finde det rigtige input-felt. Kan dette ikke gøres hurtigere, evt mere kompatibel med andre browsere?
(se evt gammelt spørgsmål \'Ændre indhold i et input felt\')
<script language=\'javascript\'>
        pic1 = new Image;
        pic1.src = \'images/pic1.gif\'

        pic2 = new Image
        pic2.src = \'images/pic2.gif\'

        function invertImage(obj, id) {
            if(obj.src == pic2.src) {
                obj.src=pic1.src
                inputname = \'notclicked[]\'
            }
            else {
                obj.src=pic2.src
                inputname = \'clicked[]\'
            }
            for(i=0;i<document.forms[0].elements.length;i++) {
                if(document.forms[0].elements[i].id==id)
                    document.forms[0].elements[i].name= inputname
            }

        }
</script>

<form method=\'post\' action=\'dostuff.php\'>
<table border=\'0\'>
<tr>
  <td><img src=\'images/pic1.gif\' onclick=\'invertImage(this, 1)\'><input id=\'1\' type=\'hidden\' name=\'notclicked[]\' value=\'1\'></td>
  <td><img src=\'images/pic1.gif\' onclick=\'invertImage(this, 2)\'><input id=\'2\' type=\'hidden\' name=\'notclicked[]\' value=\'2\'></td>
  <td><img src=\'images/pic1.gif\' onclick=\'invertImage(this, 3)\'><input id=\'3\' type=\'hidden\' name=\'notclicked[]\' value=\'3\'></td>
</tr>
<tr>
  <td><img src=\'images/pic1.gif\' onclick=\'invertImage(this, 4)\'><input id=\'4\' type=\'hidden\' name=\'notclicked[]\' value=\'4\'></td>
  <td><img src=\'images/pic1.gif\' onclick=\'invertImage(this, 5)\'><input id=\'5\' type=\'hidden\' name=\'notclicked[]\' value=\'5\'></td>
  <td><img src=\'images/pic1.gif\' onclick=\'invertImage(this, 6)\'><input id=\'6\' type=\'hidden\' name=\'notclicked[]\' value=\'6\'></td>
</tr>
</table>
</form>
Avatar billede masterbp Nybegynder
12. maj 2001 - 12:12 #1
Glemte at sige, at grunden til at det er langsomt er, at jeg har >100 celler med input felter i den rigtigt kode :)
Avatar billede jakoba Nybegynder
12. maj 2001 - 12:51 #2
hvis de der <input felter er den enstes slags felter i formen kan du kvitte for-løkken og adressere dem direkte med:

document.forms[0].elements[-1+id].name = inputname;
Avatar billede stringbuffer Nybegynder
14. maj 2001 - 00:30 #3
i stedet for din løkke prøv det her (burde virke i nye browsere)

var elem = document.getElementById(id)
if (elem != null)
elem.name = inputname
Avatar billede masterbp Nybegynder
15. maj 2001 - 15:38 #4
Jeps! den der getElementByID() ting var lige hvad der manglede. Jeg fandt dog en mere kompatibel funktion i stedet for at bruge getElementByID() direkte:
function cbeGetElementById(eleId){
    var ele = null; 
    if (document.getElementById)   
        ele = document.getElementById(eleId);
    else if (is.ie4up)   
        ele = document.all[eleId]; 
    else if (is.nav4up)   
        ele = nnGetElementById(window, eleId);     
    return ele;}

function nnGetElementById(parent, searchId){ 
    var i, ele, eleFound; 
    for (i = 0; i < parent.document.layers.length; i++) {   
        ele = parent.document.layers[i];   
        if ( ele.id == searchId )     
            return ele;   
        if (ele.layers.length) {     
            eleFound = nnGetElementById(ele, searchId);     
        if (eleFound) return eleFound;   
        } 
    } 
    return null;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester