5

選択メニューの変更に使用するプロトタイプイベントリスナーがIEでトリガーされていません。

Event.observe('use_billing', 'change', Checkout.getBillingData);

これはFirefoxでは(もちろん)正常に機能しますが、IEでは(もちろん)何も起こりません-私はこれをしばらくグーグルしてきましたが、この問題に対する適切な解決策を見つけられませんでした。問題があると読みましたが、問題を回避してこれを機能させるのに役立つものは何も見つかりませんでした。

インラインイベントトリガーは目立たず、エラーが発生しやすい乱雑なドキュメントになるため、私は実際にインラインイベントトリガーの使用を避けようとしています。

<select id='use_billing' onchange="Checkout.getBillingData();">....</select>

どんなアイデアでも素晴らしいでしょう-これは、このプロジェクトがベータ版から本番環境に移行するのを妨げる唯一のことです。

4

3 に答える 3

3

これはIEの一般的な問題です。change要素がフォーカスを失うまで、イベント は発生しません。

これが実際に問題の原因であることを確認するには、メニューを変更してからTabキーを押して、フォーカスを別の要素に移動してみてください。コールバックが適切に起動した場合、他に問題がないことがわかります。

私は以前、clickまたはのような他のイベントもリッスンすることでこの問題を回避しましkeydownた。コールバックにチェックを追加して、値が以前と実際に異なることを確認し、イベントを必要以上に処理していないことを確認できます(他のブラウザーは、新しいブラウザーをクリックすると両方clickchange同時に起動するため)価値)。

于 2010-03-01T07:12:51.583 に答える
2

これは古いトピックであることは承知していますが、上記の別の回答を共有したいと思いました。私のコードでは、要素の名前と ID は同じでしたが、それは問題ではありませんでした。

起動される関数では、イベント引数がプロトタイプから渡されていました。Firefox で (イベントを発生させた) テキスト ボックスの値を取得するには、次を使用します。eventArg.currentTarget.value

ただし、IEでは使用する必要がありますeventArg.srcElement.value

したがって、両方のブラウザで動作させるには、使用する必要があります...

var value = "";
var id = "";
if(eventArg.currentTarget){//FireFox
value = eventArg.currentTarget.value;
id = eventArg.currentTarget.id;
}
else{//IE
value = eventArg.srcElement.value;
id = eventArg.srcElement.id;
}

于 2011-06-24T15:11:28.570 に答える
2

私はその理由を見つけました-それはフォーカスの問題ではありませんでした.フォーム要素の名前とid値が同じであることがわかりました-id値を変更すると、すべて正常に機能しました.

于 2010-03-01T17:38:56.367 に答える