8

ポストバックが発生する前にテキストボックスの値を確認したい。関数に値を設定しましたonClientClickが、チェックするデータを渡す方法がわかりません。この場合、txt1 に入力されたテキストをチェックしたいと考えています。

<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のキープレスイベントに沿って使用されるため、使用できないことです:

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
    }
});

txt1 値を取得するように OnclientCLick 関数に指示するにはどうすればよいですか?

ありがとうございました。

4

3 に答える 3

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 ページにとどまりたい場合は、JavaScript 関数の名前を OnClientClick に入れ、スクリプト タグに 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>
    
于 2012-11-21T15:21:57.780 に答える
2

いくつかのアプローチがあります。

最初のアプローチ:

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

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

これにより、Button コントロール (実際には単なる<input要素) が関数に渡され、好きなように操作できます。

2 番目のアプローチ:

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 を使用することをお勧めします。

于 2012-11-21T15:55:21.857 に答える
-2

以下に示すように、関数をチェックするには、文字列パスの両端に一重引用符を追加するだけです。

javascript:check('WANT TO PUT TEXTBOX VALUE HERE');
于 2012-11-21T15:18:27.323 に答える