- ベストアンサー
ASP.NET(VB2005)■ WEBページのテキストボックスへ入力するとき、文字列を2桁入力するごとにハイフンを表示させたい
- ASP.NET(VB2005)の開発環境で、WEBページのテキストボックスへの入力時に、文字列を2桁ごとにハイフンを表示させる方法について教えてください。
- 例えば、ユーザーが「01」と入力した場合、テキストボックスの表示は「01-」となるようにしたいです。
- また、この状態を維持したまま次に文字列を入力させることは可能でしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
クライアントスクリプトを仕込まないといけないでしょう <script type="text/javascript"> <!-- function myInsert() { var ss = this.value; if ( ss.length % 3 = 0 && ss.length > 0 ) { this.value = ss.substring(0,ss.length-1) + '-' + ss.substring(ss.length-1,ss.length); } } //--> </script> といったスクリプトを埋め込んでおきます Page_Loadイベントなどで dim cs as ClientScriptManagr = Page.ClientScript dim s as string s = "window.onlooad = function() { docuemnt.getElementById('TextBox1').onkeyup = myInsert; }" if cs.IsIsClientScriptBlockRegistered("myInsert") = False Then cs.RegisterClientScriptBlock(Me.GetType(), "myInsert", s) End if
その他の回答 (3)
- redfox63
- ベストアンサー率71% (1325/1856)
クライアントスクリプトが機能してますか ・・・ Page_Loadで追加しているソースの『</script>』の前に window.alert(""); を追加してみてください 成功していればページをロードした際にOKボタンだけのアラートが表示されるはずです 次にaspxに埋め込んだ JavaScriptの 『if ( ss.length % 3 = 0 && ss.length > 0 ){』の行の前に window.alert("myInsert " + ss.length ); を加えてみましょう myInsertが呼ばれていればアラートを表示するはずです
お礼
やっとやっとできました!! if ( ss.length % 3 = 0 && ss.length > 0 )を if ( ss.length % 3 == 0 && ss.length > 0 )に変更するとできました。 redfox63様、本当にありがとうございました!! これですっきり気持ちよく眠れそうです。 JavaScriptって何となく苦手意識を持っていましたが、基礎からちゃんと勉強していこうと思います。 一応、下記に成功したコードを記します。 ------------------------------- %@ Page Language="VB" AutoEventWireup="false" CodeFile="hyphen_080224_1.aspx.vb" Inherits="hyphen_hyphen_080224_1" %> <!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> <script type="text/javascript"> function myInsert() { var ss = this.value; if ( ss.length % 3 == 0 && ss.length > 0 ) { this.value = ss.substring(0,ss.length-1) + '-' + ss.substring(ss.length-1,ss.length); } } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div> </form> </body> </html> ------------------------------- Partial Class hyphen_hyphen_080224_1 Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cs As ClientScriptManager = Page.ClientScript Dim s As String s = "<script language=''>window.onload = function() { document.getElementById('TextBox1').onkeyup = myInsert; }</script>" If cs.IsClientScriptBlockRegistered("myInsert") = False Then cs.RegisterClientScriptBlock(Me.GetType(), "myInsert", s) End If End Sub End Class
- redfox63
- ベストアンサー率71% (1325/1856)
s = "<script language=''>window.onlooad = function() { document.getElementById('TextBox1').onkeyup = myInsert; }</script>" の部分に間違いがありました 『window.onlood』は window.onload です … oが1つ余分でした
補足
見捨てないで下さりありがとうございます!! ----------------------------------- 『window.onlood』を window.onload に変更しても同じでした。 因みに次に以下のように変数名「s」→「ss」に変更してみましたが変化ありません。 この変更は間違っていますでしょうか? 何度も何度もすみません。<(_ _)><(_ _)> ----------------------------------- Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cs As ClientScriptManager = Page.ClientScript Dim ss As String ss = "<script language='JavaScript'>window.onload = function() { document.getElementById('TextBox1').onkeyup = myInsert; }</script>" If cs.IsClientScriptBlockRegistered("myInsert") = False Then cs.RegisterClientScriptBlock(Me.GetType(), "myInsert", ss) End If End Sub End Class
- redfox63
- ベストアンサー率71% (1325/1856)
いろいろタイプミスがあったようですね … 『docuemnt』はdocumentが正解です
補足
『docuemnt』をdocumentに変更しても結果が同じだったので 下記のようにコードの一部を変更しました。 ----------------------------------------- Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cs As ClientScriptManager = Page.ClientScript Dim s As String s = "<script language=''>window.onlooad = function() { document.getElementById('TextBox1').onkeyup = myInsert; }</script>" If cs.IsClientScriptBlockRegistered("myInsert") = False Then cs.RegisterClientScriptBlock(Me.GetType(), "myInsert", s) End If End Sub ----------------------------------------- javascriptのコードはWEBページ上で表示されなくはなりましたが あいかわらずハイフンが表示されません。 redfox63様が見知らぬ私を育てようとして下さっているような気がしてなりません。 先ほどのタイプミスとおっしゃっているのは 私を育てようとして下さっているredfox63様の思いやりのある技なんですね。 「ありがとうございます!」 引き続きアドバイス下さると嬉しいです。
補足
アドバイスをありがとうございます。 試したところ「型 'ClientScriptManagr' が定義されていません。」と 「エラー修正」のオプションが表示され3つの候補の一番はじめ、 「ClientScriptManagr'を 'ClientScriptManagr' に変更します。」 を選択すると赤い波線が消えました。 因みに残りの2行は以下でした。 ●'ClientScriptManagr'を 'UIClientScriptManagr' に変更します。 ●'ClientScriptManagr'を 'Web.UIClientScriptManagr' に変更します。 エラーが表示されなくなったところで実行したところWEBページ上に以下のコードが表示されてしまいました。 window.onlooad = function() { docuemnt.getElementById('TextBox1').onkeyup = myInsert; } javascriptは既存のコードをコピペしながらほんの数文字ちょこっと変更しているだけなので原因がわかりません。 勉強が足らなくてすみません。<(_ _)> アドバイスを参考にして実行したコードは以下です。 引き続きご教授頂けると嬉しいです。 【Default.aspx】----------ココから------------- <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!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"> <script type="text/javascript"> <!-- function myInsert() { var ss = this.value; if ( ss.length % 3 = 0 && ss.length > 0 ) { this.value = ss.substring(0,ss.length-1) + '-' + ss.substring(ss.length-1,ss.length); } } //--> </script> <title>無題のページ</title> </head> <body> <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></div> </form> </body> </html> ----------ココまで------------- 【Default.aspx.vb】----------ココから------------- Partial Class _Default Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cs As ClientScriptManager = Page.ClientScript Dim s As String s = "window.onlooad = function() { docuemnt.getElementById('TextBox1').onkeyup = myInsert; }" If cs.IsClientScriptBlockRegistered("myInsert") = False Then cs.RegisterClientScriptBlock(Me.GetType(), "myInsert", s) End If End Sub End Class ----------ココまで-------------