2008-08-08 45 views
10

Mã sau hoạt động tốt trong IE, nhưng không phải trong FF hoặc Safari. Tôi không thể cho cuộc sống của tôi làm việc tại sao. Mã này là được cho là để tắt các nút radio nếu bạn chọn tùy chọn "Tắt 2 nút radio". Nó sẽ cho phép các nút radio nếu bạn chọn tùy chọn "Bật cả hai nút radio". Cả hai đều hoạt động ...Làm cách nào để bật các nút radio bị vô hiệu hóa?

Tuy nhiên, nếu bạn không sử dụng chuột để di chuyển giữa 2 tùy chọn ("Bật ..." và "Tắt ...") thì các nút radio dường như không bị vô hiệu hóa hoặc được kích hoạt chính xác, cho đến khi bạn nhấp vào bất kỳ nơi nào khác trên trang (không phải trên chính nút radio).

Nếu có ai có thời gian/tò mò/cảm thấy hữu ích, vui lòng dán mã bên dưới vào trang html và tải nó lên trong trình duyệt. Nó hoạt động tốt trong IE, nhưng vấn đề thể hiện chính nó trong FF (3 trong trường hợp của tôi) và Safari, tất cả trên 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"> 
     <select name="user" onchange="javascript: SetLocationOptions()"> 
     <option value="" />Choose One 
     <option value="58" user_is_tsm="0" />Enable both radio buttons 
     <option value="157" user_is_tsm="1" />Disable 2 radio buttons 
     </select> 

     <br /><br /> 

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

     <br /><br /> 

     <input type="button" class="buttonStyle" value="Submit Request" /> 
    </form> 
    </body> 
</html> 
+0

Umm, điều này được làm việc trong IE10 và FF: [fiddle] (http: //jsfiddle.net/K6cAu/1/) – akinuri

Trả lời

3

Để có được FF bắt chước hành vi của IE khi sử dụng bàn phím, bạn có thể sử dụng sự kiện khóa trên hộp chọn. Trong ví dụ của bạn (tôi không phải là một fan hâm mộ của chú xử lý sự kiện theo cách này, nhưng đó là một chủ đề khác), nó sẽ là như thế này:

<select name="user" id="selUser" onchange="javascript:SetLocationOptions()" onkeyup="javascript:SetLocationOptions()"> 
3

Vâng, IE có mô hình đối tượng hơi không chuẩn; những gì bạn đang làm không nên làm việc nhưng bạn đang nhận được đi với nó bởi vì IE là tốt đẹp cho bạn. Trong Firefox và Safari, document.frm trong mã của bạn sẽ được đánh giá là không xác định.

Bạn cần sử dụng giá trị id trên các phần tử biểu mẫu của mình và sử dụng document.getElementById('whatever') để trả về tham chiếu cho chúng thay vì đề cập đến thuộc tính không tồn tại của đối tượng tài liệu.

Vì vậy, điều này làm việc tốt hơn một chút và có thể làm những gì bạn đang sau:

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

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

Nhưng bạn có thể muốn kiểm tra cuốn sách tuyệt vời này nếu bạn muốn tìm hiểu thêm về cách thức phải đi về những điều : DOM Scripting bởi Jeremy Keith

Ngoài ra trong khi chúng tôi về đề tài này, Bulletproof Ajax của cùng tác giả cũng là xứng đáng một vị trí trên kệ sách của bạn như là JavaScript: The Good Parts bởi Doug Crockford

1
không g

Tại sao rab một trong những thư viện kịch bản AJAX, chúng trừu tượng hóa rất nhiều trình duyệt chữ thập DOM của ma thuật đen và làm cho cuộc sống trở nên dễ dàng hơn rất nhiều.

Các vấn đề liên quan