2012-11-21 12 views
7

ポストバックが発生する前に、テキストボックスの値をチェックしたいと思います。 onClientClickの値を自分の関数に設定しましたが、チェックするデータを渡す方法がわかりません。この場合は、入力されたtxt1のテキストをチェックします。aspxページ内のJavaScript関数に値を渡す方法

<asp:textbox id="txt1" runat="server /> 

<asp:LinkButton ID="LinkButton1" 
       runat="server" 
       Text="Save" 
       onclick="Save" 
       OnClientClick="javascript:check(WANT TO PUT TEXTBOX VALUE HERE);" 
       /> 

私のjavascript:

function check(txt) { 
var pattern = /^[0-9]{1,11}(,[0-9]{0,2})?$/; 
if (!pattern.test(txt)) { 
    return false; 
} 
else { 
    return true; 
} 
} 

問題は、このチェック機能がTXT1のKeyPressイベントに沿って使用されているということですので、私はカントの使用:

function check(){ 
    var txt=$('#txt1').val(); 
} 

全体JSコード:

$('#txt1').keypress(function (e) { 
    var key = String.fromCharCode(e.which); 
    var txt = $(this).val() + key; 
    if (check(txt)) { 
     // do sth 
    } else { 
     e.preventDefault(); 
     // do sth 
    } 
}); 

どのようにすればよいですかOnclientCLick関数を使用してtxt1値を取得しますか?

ありがとうございます。

+1

OnClientClick = "javascript:..." - 言語を指定する必要はありません.JSのみ可能です。 –

+0

問題に干渉しません。何も問題はないjavascript:存在するかどうか – anmarti

答えて

8

そのような何か:

<asp:textbox id="txt1" runat="server /> 

<asp:LinkButton ID="LinkButton1" 
       runat="server" 
       Text="Save" 
       onclick="Save" 
       OnClientClick="check(document.getElementById('<%=txt1.ClientID%>').value;)" 
       /> 

編集:
その他の方法:

  1. あなたは、サーバー側でそれを追加することができますLinkButton1.OnClientClick="check(document.getElementById('" + txt1.ClientID + "').value;)"

  2. あなたはaspxページのままにしたい場合は、OnClientClickでjavascript関数の名前を入れて、スクリプトタグ内のJavaScript関数を実装する必要があります。

    <asp:LinkButton ID="LinkButton1" 
           runat="server" 
           Text="Save" 
           OnClientClick="validate();" 
           /> 
    <script type="text/javascript"> 
        function validate() { 
         alert(document.getElementById('<%=txt1.ClientID%>').value); 
         return false; 
        } 
    </script> 
    
+0

IE8はセミコロンを正しく解析しません。ただそれを削除します。さらに、この行は次のように置き換えられます。 getElementById( '<%= txtPenal.ClientID%>')。注: '<'と実行時のjavascriptエラーがスローされます。オブジェクトが見つかりません。 – anmarti

+0

OK、私は他の方法で自分の投稿を編集しました:リンクボタンonclientclinkにasp変数を直接追加することは不可能なようです... [この投稿にある]回答もあります。(http://stackoverflow.com/questions/ 4311874/how-to-pass-csharp-binding-variable-to-javascript-function)が動作しません。 –

-2

文字列の両端に一重引用符を追加するだけで、以下のように機能を確認することができます。

javascript:check('WANT TO PUT TEXTBOX VALUE HERE'); 
+1

チェックするテキストは大文字のテキストではなく、チェックボックスの値です:...-) –

+0

はいこれは@SamuelCaillerieです。ありがとうございます。 – anmarti

+0

私の間違い、私を訂正していただきありがとうございます – Ravia

1

あなたが持っていますいくつかのアプローチ。

最初のアプローチ:

function sayHello(obj){ 
    alert(obj.id + " says 'Hello!'"); 
}; 

<asp:Button runat="server" ID="btnApproach1" OnClientClick="sayHello(this)" 
Text="Say Hello" /> 

これは、関数にButtonコントロール(実際には、単に<input要素)を通過し、あなたは、あなたが喜ばしかし、それに取り組むことができます。

第二のアプローチ:ここ

function checkValue(e) { 

    //If it has a target, use it. Otherwise, use srcElement (for IE) 
    var ctrl = e.target || e.srcElement; 

    //Do whatever you need to with the text, no button necessary. 

}; 

function bindEvent(ctrl, event, handler, propagates) { 
    if (ctrl.addEventListener) { 
     ctrl.addEventListener(event, handler, propagates); 
    } 
    else { 
     ctrl.attachEvent("on" + event, handler); 
    } 
}; 

window.onload = function() { 

var myCtrl = document.getElementById('<%=txtToValidate.ClientID%>'); 

bindEvent(myCtrl, "keydown", checkValue, false); 

}; 

<asp:Button runat="server" ID="btnApproach2" Text="Say Hello" /> 

、あなたは(望ましい)舞台裏のコントロールにイベントを結合し、プレゼンテーション層(あなたの.aspxの)からそのロジックを削除しています。

どちらのアプローチもうまくいきますが、私は懸念の分離のためにオプション2を使うことをお勧めします。

関連する問題