1

この IE の onchange イベントが false を返すと、IE のフォーカスはその入力ボックスにとどまります。Firefox では、フォーカスは常に次のフィールドに移動します。

HTML:

input name="seminar_donation" type="text" id="seminar_donation"
onchange="return CheckTotal(this);"

JavaScript:

function CheckTotal(inputbox) {  
    if (isNaN(parseInt(inputbox.value))) {  
         alert("Please enter only digits 0-9");  
         inputbox.focus();  
         return false;  
    }  
    return true;  
}  

IE では、inputbox.focus() は必要ありませんが、残念ながら、間違った入力ボックスにフォーカスを保持するために Firefox では何もしていないようです。Firefox をその入力ボックスに留まらせるにはどうすればよいですか?

4

3 に答える 3

1

わずかに異なる主題ではあるが、「タイミング」の問題を示唆する回答は、もはやここにはないように思われる. そこで、「タイムアウト」をググってみたところ、2005 年の Mike Rankin のブログが見つかりました。これにより、focus() を次のように変更することで問題を解決できました。

var t= setTimeout('document.getElementById("seminar_donation").focus()',1);

そのため、Firefox は引き続き次のフィールドに進みますが、1 ミリ秒後に、このコードはフォーカスを誤ったフィールドに戻します。その次のフィールドに oblur イベントがある場合、タイムアウトによって強制的にフォーカスが戻されたときに onblur がトリガーされるため、扱いにくいです。しかし、これは明らかに Firefox の長年にわたるバグの回避策です。

于 2010-01-13T16:48:55.917 に答える
1
setTimeout('document.getElementById("seminar_donation").focus()',1);
于 2010-01-13T16:55:14.767 に答える
-1

onchange 属性に「return」を追加してみましたか? すなわち

<input name="seminar_donation" type="text" id="seminar_donation" onchange="return CheckTotal(this);">

これが機能するかどうかは完全にはわかりませんが、試してみる価値はありますか?

編集:明確にするために、私がよくわからない理由は、通常、これに別の方法でアプローチし、htmlではなくjavascriptでイベントハンドラーをバインドするためです。

于 2010-01-13T16:32:11.753 に答える