-4

キーボードのキー値を取得する関数があります。パラメータでイベントを使用する必要がある理由を知りたい

<form>
Char: <input type="text" id="char" size="15" /> Keycode: <input type="text" id="keycode" size="15" />
</form>

<script type="text/javascript">

var charfield=document.getElementById("char")
charfield.onkeydown=function(event){
//var e=window.event || e
document.getElementById("keycode").value=event.keyCode
}

</script>
4

3 に答える 3

1

JSはイベント駆動型であり、イベントオブジェクトにアクセスできない場合は、F1で自転車を使用してレースを行うことになります。レース(車===イベント)が飛んでいるのを見ることができますが、それらに到達することはできません...(申し訳ありませんが恐ろしいアナロジーですが、要点はわかります)。
より多くの双方向性を向上/有効にするには、クライアントが何をするかを知っている必要があります。そうすれば、それに応じて対応できます。ユーザーがクリックした場合、たとえば、ページのどこをクリックしたかを知りたい場合があります。これ以上のものはすべてイベントオブジェクトにあります。それがないということは、戦争に行くようなもので、武装しておらず、手を後ろで縛って目隠しをしているようなものです。

考えてみてください。イベントが重要な他のプログラミング言語(C ++、C#、Java、ActionScriptなど)では、実際にはユーザーから直接入力を取得するものであれば、同じ質問をすることはありません。

どちらの回答(AlphaMaleとchiborg)も、イベントオブジェクトの目的を示しています。ただし、デフォルトの演算子が混乱しているため、この行var e= window.event || e;は機能しません。これを試して:

charfield.onkeydown = function (e)//call parameter e, rather then event
{
    e = e || window.event;//no var, as a parameter, it's already declared, won't set a global
    var key = e.keyCode || e.which;//another default operator here... thx to IE
    //and so on

    if (e.preventDefault)
    {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
    e.returnValue = false;
    e.cancelBubble = true;
};

そこで、イベントオブジェクトで使用できる(そして頻繁に使用する)メソッドの小さなリストを次に示します。

e = e || window.event;IEはe = e !== undefined ? e : window.event;イベントオブジェクトをハンドラーに渡さないため、自分で取得する必要があります(これはグローバルオブジェクトのプロパティであるためwindow.)。これが機能しなかった理由は、JSエンジンにwindow.event(IEのみ)とe宣言していたのどちらかを選択させたためです。実際のイベントオブジェクトはeventパラメーターに格納されていました。あなたは書くべきだったevent = event || window.event;

2行目var key = e.keyCode || e.which;は、押されたキーのキーコードを取得します。ここでも、IEとW3Cは、このプロパティの名前について意見が一致していません。実際、彼らが常に同意している物件は1つだけですtypeここにいくつかのより多くのプロパティ

最後に、イベントを防止/ブロックできるようにするいくつかのメソッドを呼び出しました。電話番号を要求していて、ユーザーがテキストの入力を開始したとします。onkey*これで取得できるイベントのいずれかを使用しpreventDefault、メソッドを使用して入力の受け入れstopPropagationを停止します。(それ以上のものがありますが、今はそれについては説明しません)。繰り返しになりますが、ほとんどのブラウザにはそのためのこれらのメソッドがありますが、IEにはさまざまなイベントモデルがあり、ここで詳細に説明しています。それに伴い、IEのトラックでイベントを停止するという別の見方があります。プロパティ。後者は特に厄介です。何かしたくない場合はtrueに設定するため
returnValuecancelBubble起こる...しかし、それは私の意見です。

イベントパラメータを使用して実行できることは他にもたくさんありますが、簡単に言うと、JSはイベント駆動型であり、イベントオブジェクトにアクセスできないと機能が低下します...

于 2012-08-09T10:24:07.680 に答える
1
charfield.onkeydown = function(event){ ... }

ここで、引数 orはevent単にEvent オブジェクトのインスタンスとして使用されることもあります。そのインスタンスに付けられた変数名です。イベントがトリガーされると、は自動的に に渡されます。eevent objectevent handler

イベント オブジェクトは、イベント ハンドラに役立つプロパティとメソッドをいくつか提供します。

于 2012-08-09T07:44:13.423 に答える
1

ブラウザが異なれば、イベント モデルも異なります。この線

var e=window.event || e

イベント関数のパラメータを取らない Internet Explorer 用です。

詳細については、この記事を参照してください。

于 2012-08-09T07:40:13.973 に答える