- PR -

SetFocusについて

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-11-22 23:05
引用:

のすけさんの書き込み (2006-11-15 13:32) より:

但し、検証は(サーバではなく)クライアントにて行う。


これが、「サーバで行うのは当然として、クライアントでも行う」という意味なのか、「サーバでは検証せず、クライアントだけで検証する」という意味なのか、とっても気になりました。
_________________
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-11-23 01:02
うーん、うまく行かないとはどんな風にうまくいかないんですか?
そんな長くないからこっちのコードを貼ってみます
コード:

<!-- HTML -->
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1"
runat="server"
ControlToValidate="TextBox1"
ErrorMessage="RegularExpressionValidator"
ValidationExpression="^[0-9]+$"
ValidationGroup="valGrp"></asp:RegularExpressionValidator>
<asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="valGrp" />



コード:

// C#
protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "RegularExpressionValidator1.focusOnError='t';";
}



追記
って、何で C# で書いてるんだw
ValidationGroup って初めて知った。。。
_________________
かるあ のメモ
http://karua.at.webry.info/

[ メッセージ編集済み 編集者: かるあ 編集日時 2006-11-23 01:04 ]
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2006-11-24 01:22
引用:

かるあさんの書き込み (2006-11-22 11:12) より:
ASP.NET 側で明示的にそういう機能を提供していないから、
将来的に使えなくなるかも知れないしどこかに副作用があるかも。


Validatorが生成するスクリプトって、ASP.NET1.1と2.0で全然違いますもんね。
少なくともクライアント側では、Validatorに頼らず自前でスクリプトを書いちゃうのが
一番簡単で確実なような気がします。
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-11-24 17:42
皆様、ご返信ありがとうございます。

>かるあさん(をはじめ皆様)
<現状>
「うまくいかない」とは、クライアントで文字種(ValidationExpression)チェックはなされるが、フォーカスがエラーとなる文字列が入力されたテキストボックスに戻らないという状態です。
<要件(再確認)>
要件は「フォーカスがエラーとなる文字列が入力されたテキストボックスに戻る」ということです。但し、このフォーカスの設定はサーバ側ではなくて、クライアントにて行いたい、ということでした。
<追加要件>
前提として、フォーカスがテキストボックスに設定されていても、enterキー押下で当該ボタン押下の効果は発生しない。(ボタンクリックが発生するのは、フォーカスが当該ボタンに設定された上で押下/クリックされる場合のみとする。)

 ・・・ということで、お願い致します。

>Jittaさん
「サーバで行うのは当然として、クライアントでも行う」という意味です。
質問の仕方についてのご指摘は勉強になるので、本当にありがたいと思います。

>ぼのぼのさん
そうかもしれません。。。
土日に悩んでみます。。。

皆さんのご返信、本当に勉強になり、大いに感謝しております。
今後とも宜しくお願い申し上げます。
dotnetmemo
常連さん
会議室デビュー日: 2006/04/29
投稿数: 24
投稿日時: 2006-11-25 02:10
要求が正しく理解できていないかもしれませんが、
TextBoxからフォーカスが抜けるタイミング(onblurイベント)の処理を抑制したのであれば、onblurイベントを上書きしてしまえばOKのようです。

とりあえず、IE6で簡単に確認したサンプルの抜粋を張っておきます。あと、チェック処理はonchangeイベントなので抑制したければ同様に上書きすればOKだと思います。

<html xmlns="http://www.w3.org/1999/xhtml" >
...
</body>
<script language=javascript>
document.all["TextBox1"].onkeypress = null;
document.all["TextBox1"].onblur = null;
Form1.onkeypress = function() { if (event.keyCode == 13) return false;}
</script>
</html>
のすけ
常連さん
会議室デビュー日: 2006/11/14
投稿数: 28
投稿日時: 2006-11-27 17:56
dotnetmemoさん、ご返答ありがとうございます。

なぜでしょうか、スクリプトエラー(javascriptにて実装)となってしまいます。

以下、実験してみたコードです。
<script type="text/javascript" language="JavaScript">
 //document.all["XXXXXXX"].onBlur = null;
 //document.all("XXXXXXX").onBlur = null;
 //document.all("XXXXXXX").onBlur = "null";
 //document.all("XXXXXXX").onBlur = false;
 //document.all("XXXXXXX").onBlur = "false";
</script>

onBlurイベントの抑制という観点から以下のようなダミー関数を呼ぶパターンでもやってみました。
 //document.forms[0].XXXXXXX.onBlur = funcDummy;
 //document.all["XXXXXXX"].onBlur = funcDummy;
 //document.all("XXXXXXX").onBlur = funcDummy;
 //document.all("XXXXXXX").onBlur = "funcDummy";
 //document.all("XXXXXXX").onBlur = funcDummy();
 //document.all("XXXXXXX").onBlur = "funcDummy()";
 <ダミー関数>
 function funcDummy() {
 return false;
}

いずれも、スクリプトエラーとなります。。。なぜでしょうか。
.NETの質問ではなくなっておりますが。。。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-27 18:20
引用:

のすけさんの書き込み (2006-11-27 17:56) より:

なぜでしょうか、スクリプトエラー(javascriptにて実装)となってしまいます。


どの時点で Script エラーが起きているか検証しましたか?
たとえば、

> document.all["XXXXXXX"]

この時点で、正しいオブジェクトが取得できているかを確認するだけで、ぐっと解決に近づきます。
デバッグの基本は問題の切り分けです。

引用:

.onBlur


'B' が大文字になっていますね。

引用:

language="JavaScript"


DOCTYPE は、HTML4.0、HTML4.01 Transitional、HTML4.01 Frameset、XHTML1.0 のいずれかなのですね。
(注意 : 本題とは関係のないところです)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
dotnetmemo
常連さん
会議室デビュー日: 2006/04/29
投稿数: 24
投稿日時: 2006-11-27 22:29
とりあえず、こちらで動作しているコードをのせておきます。
また、document.allはIE依存したかもしれませんので、getElementByIdに変更しておきました。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default4.aspx.vb" Inherits="Default4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>無題のページ</title>
</head>
<body>
<form id="Form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1"
ErrorMessage="数値を入力してください" SetFocusOnError="True" ValidationExpression="[0-9]*">*</asp:RegularExpressionValidator>&nbsp;
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Button" /></div>
</form>
</body>
<script language="javascript" type="text/javascript">
<!--
document.getElementById("TextBox1").onkeypress = null;
document.getElementById("TextBox1").onblur = null;
Form1.onkeypress = function() { if (event.keyCode == 13) return false;}
-->
</script>
</html>

スキルアップ/キャリアアップ(JOB@IT)