Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 15:33 Der er 11 kommentarer og
1 løsning

Kopier radio button og sæt name

Jeg har brug for at kopiere en radio button i javascript og sætte nye name og id på den. Id kan jeg godt sætte. Men når jeg sætter name på den, er det ligesom om den ikke bliver rigtig sat. Hvis jeg forespørger på selve name-propertien returnerer den rigtigt nok det nye name, men når jeg lægger min radio button ind på html-siden, er name ikke længere med.

Med samme metode kan jeg godt kopiere name og id på alle andre typer felter. Her er en lille kodestump der illustrerer problemet.

<form method="POST">
  <div id="testformdiv">
  <input type="checkbox" onclick="copyRadioButtons()" name="C1" value="ON">
  <input type="radio" value="V1" checked name="R1" id="rid1">
  <input type="radio" name="R1" value="V2" id="rid2"></p>
</div>
</form>

<script language="javascript">
function copyRadioButtons()
{
  var oldField = document.getElementById('rid1');
  var newField = document.createElement('INPUT');
  newField.type = oldField.type;
  newField.name = oldField.name;
  newField.id = oldField.id;
  alert('newField.name: '+newField.name);
  alert('newField.outerHTML: '+newField.outerHTML);
 
  document.getElementById('testformdiv').appendChild(newField);
}
</script>

Nogen der kender til det og evt. har en løsning?
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 15:44 #1
Jeg kan autogenere rå html og tilføje det til innerHTML, men det vil meget nødigt.
Avatar billede olebole Juniormester
15. januar 2005 - 15:58 #2
<ole>

Det virker fint i andet end IE (surpriiiiiize!)  :)

I IE virker det for såvidt også. Radio'en tegnes og den har et name, selvom det ikke kan aflæses i inner-/outerHTML. Radio'en tegnes forkert - og den viser ikke, når den er valgt - men den eksisterer fint på serveren  :o|

Der kan sikkert konstrueres et eller andet sygt hack ... men så skal der pilles grundigt og forsøges en masse.

/mvh
</bole>
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 16:01 #3
Jeg er godt klar over det. Den tegnes fint, men man kan ikke vælge den i IE fordi den ikke har noget name som browseren er klar over.

Det er det syge hack jeg leder efter. Hjælp.
Avatar billede olebole Juniormester
15. januar 2005 - 16:31 #4
Jo, browseren kender godt navnet - det er ikke problemet  :)
Avatar billede nielsbrinch Nybegynder
15. januar 2005 - 16:57 #5
Jeg kan forespørge på navnet gemmen javascript, men bortset fra det eksisterer navnet ikke, så vidt jeg kan vurdere.
Avatar billede olebole Juniormester
16. januar 2005 - 02:15 #6
1. Du kan forespørge på navnet og browseren kan finde elementet I DOM'en.
2. Klikker du på radio'en og submitter formen, er radio'en successfull og kan findes på serveren.

Ergo: Browseren kender udmærket til elementets eksistens - men har problemer med renderingen og kan ikke vise elementet i (inner-/outer-)HTML'en.
Kendte browseren ikke elementets navn, ville de to ting ikke kunne lade sig gøre  :)

Jeg ved godt, dette ikke løser dit aktuelle problem, men du kunne jo overveje at bruge innerHTML alligevel. Under alle omstændigheder er det formodentlig bedre at undgå tvivlsomme 'hacks' - og sålænge, det er umuligt at bruge XHTML på WWW, er der ikke de store fordele ved at bruge DOM fremfor innerHTML.

Er denne og andre DOM-fejl til gengæld ikke fixed i næste version, må IE formodes at være en død sild. Når først XHTML2.0 bliver en realitet, vil det nemlig være helt umuligt at anvende innerHTML, document.write, m.m.
Det varer dog en rum tid endnu, før XHTML kan anvendes på WWW, så brug du bare innerHTML  ;o)
Avatar billede olebole Juniormester
16. januar 2005 - 04:34 #7
Efter lidt mere research og tests må jeg konkludere, at du nok ikke kommer helt udenom brug af HTML i IE.
Prøv at kikke her:
  http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/methods/createelement.asp

oElement = document.createElement(sTag)
"Attributes can be included with the sTag as long as the entire string is valid HTML. You should do this if you wish to include the NAME attribute at run time on objects created with the createElement method."

Der er bl.a. givet et eksempel med radio-buttons. Det er dog kun IE, der forstår den syntaks, så du er nødt til at diskriminere mellem browsere. Bemærk i øvrigt, at du ikke kan sætte ens ID'er på to elementer. En ID *skal* være unik:

<script language="javascript">
function copyRadioButtons() {
    var uA, newField, oldField = document.getElementById('rid1');
    uA = navigator.userAgent.toLowerCase();
    if (uA.indexOf("msie")!=-1 && uA.indexOf("opera")==-1) { // En IE
        newField = document.createElement("<input name='"+oldField.name+"'>")
    } else { // Alt andet end IE
        newField = document.createElement('input');
    }
    newField.type = oldField.type;
    newField.name = oldField.name;
    newField.id = oldField.id + "__HUSK_En_ID_skal_vaere_unik";
    document.getElementById('testformdiv').appendChild(newField);
    alert(document.getElementById('testformdiv').innerHTML)
}
</script>
Avatar billede nielsbrinch Nybegynder
17. januar 2005 - 08:38 #8
Tak. Jeg sætter pris på du ligger søvnløs for at løse mit radio button problem :-)
Avatar billede nielsbrinch Nybegynder
17. januar 2005 - 08:49 #9
Det ser ud til at virke. Tak for det. Svar.
Avatar billede nielsbrinch Nybegynder
25. januar 2005 - 11:11 #10
olebole, skal vi ikke se at få lukket spørgsmålet?
Avatar billede nielsbrinch Nybegynder
27. april 2005 - 20:00 #11
Læg et svar. Sidste chance ...
Avatar billede nielsbrinch Nybegynder
25. maj 2005 - 10:56 #12
Nu lukker jeg altså spørgsmålet. Sig til hvis du vil have points alligevel.
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