Cum pot activa butoanele radio dezactivate?

Următorul cod funcționează excelent în IE, dar nu în FF sau Safari. Nu pot să mă descurc pentru viața mea de ce. Codul este presupus pentru a dezactiva butoanele radio dacă selectați opțiunea "Dezactivați 2 butoane radio". Ar trebui să activați butoanele radio dacă selectați opțiunea "Activați ambele butoane radio". Ambele ...

Cu toate acestea, dacă nu utilizați mouse-ul pentru a vă deplasa între cele 2 opțiuni ("Activați ..." și "Dezactivați ..."), butoanele radio nu par a fi dezactivate sau activate corect, până când faceți clic în altă parte pe pagină (nu pe butoanele radio).

Dacă cineva are timp / este curios / vă este de ajutor, vă rugăm să inserați codul de mai jos într-o pagină html și încărcați-l într-un browser. Funcționează excelent în IE, dar problema se manifestă în FF (3 în cazul meu) și Safari, toate pe Windows XP.

<html>
  <head>
    <script language="javascript">
      function SetLocationOptions() {
        var frmTemp = document.frm;
        var selTemp = frmTemp.user;

        if(selTemp.selectedIndex >= 0) {
          var myOpt = selTemp.options[selTemp.selectedIndex];
          if(myOpt.attributes[0].nodeValue == '1') {
            frmTemp.transfer_to[0].disabled = true;
            frmTemp.transfer_to[1].disabled = true;
            frmTemp.transfer_to[2].checked = true;
          } else {
            frmTemp.transfer_to[0].disabled = false;
            frmTemp.transfer_to[1].disabled = false;
          }
        }
      }
    </script>
  </head>

  <body>
    <form name="frm" action="coopfunds_transfer_request.asp" method="post">
      

      

<input type="radio" name="transfer_to" value="fund_amount1" />Premium    <input type="radio" name="transfer_to" value="fund_amount2" />Other    <input type="radio" name="transfer_to" value="both" CHECKED />Both

<input type="button" class="buttonStyle" value="Submit Request" /> </form> </body> </html>
0
fr hi bn
Umm, aceasta funcționează în IE10 și FF: vioară
adăugat autor akinuri, sursa

3 răspunsuri

Ei bine, IE are un model oarecum neobișnuit de obiect; ceea ce faci nu ar trebui să funcționeze, dar te descurci cu ea pentru că IE este frumos pentru tine. În Firefox și Safari, document.frm din codul tău evaluează nedefinit.

Trebuie să utilizați valorile id pe elementele formularului și să utilizați document.getElementById ('whatever') pentru a returna o referință la ele în loc să se refere la proprietățile inexistente ale obiectului documentului.

Deci, acest lucru funcționează un pic mai bine și poate face ceea ce urmează:

Line 27: <form name="frm" id="f" ...

Line 6: var frmTemp = document.getElementById('f');

Dar ați putea dori să verificați această carte excelentă dacă doriți să aflați mai multe despre modul corect de a face lucrurile: DOM Scripting de Jeremy Keith

De asemenea, în timp ce suntem pe această temă, Ajax împotriva bulletului de către același autor merită, de asemenea, de un loc pe raftul dvs. ca este JavaScript: piesele bune de Doug Crockford

0
adăugat

Pentru a obține FF pentru a imita comportamentul IE atunci când utilizați tastatura, puteți utiliza evenimentul tastaturii în caseta de selectare. În exemplul dvs. (nu sunt un fan al atașării de manipulatori de evenimente în acest fel, dar acesta este un alt subiect), ar fi așa: