如何将值传递到onClientClick的aspx页面中的javascript函数

时间:2012-11-21 15:10:06

标签: javascript asp.net

我想在回发之前检查文本框值。我将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
    }
});

如何告诉OnclientCLick函数获取txt1值?

谢谢。

3 个答案:

答案 0 :(得分: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>
    

答案 1 :(得分:2)

你有几种方法。

第一种方法:

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 :(得分:-2)

您只需在字符串传递的两端添加单引号以检查功能,如下所示。

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