19

次のコードは IE ではうまく機能しますが、FF や Safari では機能しません。私は一生、理由を解明することはできません。「2つのラジオボタンを無効にする」オプションを選択すると、コードはラジオボタンを無効にするはずです。「両方のラジオ ボタンを有効にする」オプションを選択すると、ラジオ ボタンが有効になります。これらは両方とも機能します...

ただし、マウスを使用して 2 つのオプション (「有効にする...」と「無効にする...」) の間を移動しない場合、他の場所をクリックするまで、ラジオ ボタンは正しく無効または有効にされないように見えます。ページ上 (ラジオ ボタン自体ではありません)。

時間のある方、興味のある方、役に立ちそうな方は、以下のコードを HTML ページに貼り付けて、ブラウザにロードしてください。IE では問題なく動作しますが、すべて Windows XP の FF (私の場合は 3) と Safari で問題が発生します。

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;
    }
  }
}
<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>

4

3 に答える 3

6

キーボードを使用するときに FF に IE の動作を模倣させるには、選択ボックスで keyup イベントを使用できます。あなたの例 (私はこの方法でイベント ハンドラーをアタッチするのは好きではありませんが、それは別のトピックです) では、次のようになります。

<select name="user" id="selUser" onchange="javascript:SetLocationOptions()" onkeyup="javascript:SetLocationOptions()">
于 2008-08-09T18:15:12.900 に答える
3

ええと、IE にはやや非標準のオブジェクト モデルがあります。あなたがしていることはうまくいくはずがありませんが、IE があなたに親切にしてくれたので、それをうまくやってのけています。Firefox と Safari では、コード内の document.frm は未定義と評価されます。

フォーム要素で id 値を使用document.getElementById('whatever')し、ドキュメント オブジェクトの存在しないプロパティを参照する代わりにそれらへの参照を返すために使用する必要があります。

したがって、これは少しうまく機能し、あなたが求めていることを行うかもしれません:

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

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

しかし、物事の正しい進め方について詳しく知りたい場合は、この優れた本を読むことをお勧めします: DOM Scripting by Jeremy Keith

また、この話題について話している間、同じ著者によるBulletproof Ajaxも、JavaScript と同様に本棚に置く価値があります: Doug Crockford によるThe Good Parts

于 2008-08-08T23:01:17.050 に答える
1

AJAX スクリプティング ライブラリの 1 つを手に入れてみませんか。クロス ブラウザ DOM スクリプティングの黒魔術の多くを抽象化し、生活を非常に簡単にします。

于 2008-08-08T23:21:24.777 に答える