2012-11-21 55 views
7

我想在发生回发之前检查文本框的值。我将onClientClick值设置为我的函数,但我不知道如何传递数据来检查,在这种情况下,我想检查txt1输入的文本。如何将值传递给aspx页面中的javascript函数onClientClick

<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值?

谢谢。

+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

好吧,我已经用其他方法编辑了我的帖子:似乎不可能直接在链接上添加一个asp变量onclientclink ...即使在[本文]中给出的答案(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" /> 

这将通过按钮控制(实际上,只是一个<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)去除逻辑。

这两种方法都可行,但我建议使用选项二来分离问题。

相关问题