Avatar billede scope Nybegynder
11. oktober 2005 - 09:29 Der er 8 kommentarer og
1 løsning

Hvordan sættes name attribut på input textbox?

Jeg undrer mig lidt.. Kan ikke sætte name attributten på en textbox.. Her er et lille eksempel til illustration:

<html>
  <head>
    <title></title>
    <script type="text/javascript">
      function doit(elm){
        obj = elm.previousSibling.previousSibling;
        obj.name = obj.value;
        alert(obj.outerHTML);

        obj.setAttribute( 'name', obj.value, 0 );
        alert(obj.outerHTML);

        obj.removeAttribute( 'name', 0 );
        obj.setAttribute( 'name', obj.value, 0 );
        alert(obj.outerHTML);
      }
    </script>
  </head>
  <body>
    <input type="text" id="a" name="a">
    <br>
    <button onclick="doit(this);" ID="Button1">test</button>
  </body>
</html>

Hvad siger I?

Jeg kan lige tilføje det er til IE 6, programmerer på intranet og alle brugere bruger samme version og mærke af browser.. ;)
Avatar billede scope Nybegynder
11. oktober 2005 - 10:51 #1
Dette er en mulighed men det må da kunne gøres lettere??

function doit(elm){
  obj = elm.previousSibling.previousSibling;

  tmpName = obj.name;
  tmp = obj.outerHTML.toString();
  tmp = tmp.replace('name='+ tmpName,'name="j"');

  obj.removeNode(obj);

  document.body.insertAdjacentHTML( 'beforeEnd', tmp );
  alert(document.body.innerHTML);
}
Avatar billede thomas_yde Nybegynder
11. oktober 2005 - 11:00 #2
Tjaa muligvis sådan her:
<html>


<body>

<script type="text/javascript">
function getE(id){
return document.getElementById(id);
}

function addNameElm(elmId,elmName){
elm = getE(elmId);
elm.name = elmName;
}
</script>
<input id="textBox1">

<input type="button" onClick="addNameElm('textBox1','newName');">>
</body>
</html>
Avatar billede olebole Juniormester
11. oktober 2005 - 22:16 #3
<ole>

Desværre stinker IE's DOM-håndtering af input-elementer og deres name-attribute  :o|

En lidt mere 'sexy' version af din egen metode kunne dog være:

<script type="text/JavaScript">
function myTest(repl) {
    var sElm, o = document.getElementById("gnu");
    sElm = o.outerHTML.toString().replace(/name=[^>| ]*([^>]*)>/i, "name="+repl+"$1>");
    o.parentNode.replaceChild(document.createElement(sElm), o);
}
</script>

<input id="gnu" type="text" name="foo">
<br>
<button onclick="myTest('bar');alert(document.getElementById('gnu').outerHTML)">TEST</button>

Så kan du selv erstatte 'o' med det element, du navigerer dig frem til  :)

/mvh
</bole>
Avatar billede olebole Juniormester
11. oktober 2005 - 22:24 #4
- ehhhhh ... hva' faaaaa'en ... scope ...?!??!!!  :D
Hej, knajt ... check MS' reference for createElement-metoden:
  http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp

- der viser de selv lidt om, de patetiske 'hacks', der skal til at DOM-handle input-elementer ... omend de har en anden måde at omtale det på  ;]
Avatar billede olebole Juniormester
12. oktober 2005 - 00:40 #5
- kom lige i tanker om noget andet. Det er absolut grimt - og du har det ikke fra mig  0=)

function myTest(repl) {
    var sElm, o = document.getElementById("gnu");
    o.outerHTML = o.outerHTML.replace(/name=[^>| ]*([^>]*)>/i, "name="+repl+"$1>");
}

Pas i øvrigt på med at sætte event-handlers på elementer via JS/DOM, hvis du efterfølgende ændrer dem med inner- eller outerHTML. Denne onclick-handler går f.eks. tabt, når myTest afvikles:

function myTest(repl) {
    var sElm, o = document.getElementById("gnu");
    o.outerHTML = o.outerHTML.toString().replace(/name=[^>| ]*([^>]*)>/i, "name="+repl+"$1>");
}
window.onload = function() {
    document.getElementById("gnu").onclick = function(){alert("ugh")};
}
Avatar billede olebole Juniormester
12. oktober 2005 - 01:37 #6
En løsning kunne være:

function myTest(repl) {
    var x, sElm, oEvnt = {}, o = document.getElementById("gnu");
    for (x in o) if (x.substr(0,2)=="on"&&o[x]) oEvnt[x] = o[x];
    o.outerHTML = o.outerHTML.toString().replace(/name=[^>| ]*([^>]*)>/i, "name="+repl+"$1>");
    o = document.getElementById("gnu"); // Vi har jo overskrevet lortet
    for (x in oEvnt) o[x] = oEvnt[x];
}
window.onload = function() {
    document.getElementById("gnu").onclick = function(){alert("ugh")};
}
Avatar billede scope Nybegynder
02. marts 2006 - 15:19 #7
Fatter kan du så smide det svar.. ;)

Den her har da vist ligget lidt længe?? :D
Avatar billede olebole Juniormester
11. marts 2006 - 23:19 #8
- s'gerne ... har endnu ikke fået net i den ny rede, men er lige på besøg i den gamle. Hygge, hilse - og rug nu varmt og godt på mit farfar-æg  ;D
Avatar billede scope Nybegynder
13. marts 2006 - 11:20 #9
Halløj..

Jeg skal nusse og pusse.. ;)
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