何をしたいのか分からないのでハズレかもしれませんが・・・
textarea 入力に Enter キーを受け付けたくないということであれば、以下のようにしてはいかがですか?
<textarea value="@val" @onkeypress="KeyHandler3" @onkeypress:preventDefault />
@code {
string val = "";
private void KeyHandler3(KeyboardEventArgs e)
{
if (e.Key != "Enter")
{
val += e.Key;
}
}
}
ちなみに、参考にされている記事に書いてある、
<input @onkeypress:preventDefault="_shouldPreventDefault" />
の _shouldPreventDefault を true / false に切り替えてコントロールしようと試してみましたが、キーを押した時点で即文字が input 要素の value 属性に反映されてしまうのでダメでした。
【追記】
今思い出したのですが、javascript のコード (Blazor の C# のコードではなく) で IME が ON の時は onkeypress イベントが発生しなくて、やむを得ず onkeyup で処理したことがありました。上の回答は IME が OFF の時しか試していません。今検証できる環境にないので、後で試してみます。
【追記2】
上の追記の件、自分の環境で確認しましたが、IME が ON の時は onkeypress イベントが発生しないということはなくて、期待通り Enter は入力できないようになります。
ブラウザ依存のとことろがあるようですが、Microsoft Edge 44.18362.449.0, Google Chrome 80.0.3987.149, Firefox 74.0, Opera 67.0.3575.97 で試した限り同じ結果でした。
以下の記事にあるよとおり、メジャーなブラウザでは IME が ON の時は onkeypress イベントが発生しないはずなのですが、Blazor では何故クライアント側の @onkeypress="KeyHandler3" の設定でサーバー側の KeyHandler3 ハンドラに制御が飛んでくるのかは分かりませんが。
onkeydown属性 onkeypress属性 onkeyup属性
https://w3g.jp/xhtml/dic/onkeydown
【訂正】
上の【追記2】で、
IME が ON の時は onkeypress イベントが発生しないということはなくて、
と書きましたが、間違いでしたので訂正します。
上に書いた「メジャーなブラウザでは IME が ON の時は onkeypress イベントが発生しない」というのは Blazor でも同じで、自分が提案したコードで IME が ON の時(直接入力以外の時)でもうまくいくのは onkeypress イベントが発生しないので preventDefault が働かないからでした。
但し、Enter キーを押したときは IME が ON の時でも onkeypress イベントは発生し、制御は C# のコードに飛んでくるので期待した結果(Enter キー入力はスキップ)になるということでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/03/24 02:18
2020/03/24 10:45
2020/03/24 10:52
2020/03/24 13:01