【问题标题】:How to pass a value into a javascript function within an aspx page onClientClick如何将值传递到 javascript 函数中的 aspx 页面 onClientClick
【发布时间】:2012-11-21 15:10:05
【问题描述】:

我想在回发发生之前检查文本框的值。我将 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 值?

谢谢。

【问题讨论】:

  • OnClientClick="javascript:...
  • 它不会影响我的问题。不管 javascript: 是否存在

标签: javascript asp.net


【解决方案1】:

您有几种方法。

第一种方法:

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

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

这会将 Button 控件(实际上,只是一个 &lt;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】:

    类似的东西:

    <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函数的名字,并在一个script标签中实现这个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>
      

    【讨论】:

    • IE8 无法正确解析分号。只需将其删除。此外,它替换了这一行:getElementById('<%=txtPenal.ClientID%>')。注意'<'它给我一个运行时 javascript 错误:找不到对象。
    • 好的,我已经用其他方法编辑了我的帖子:似乎不可能在链接按钮 onclientclink 中直接添加一个 asp 变量...即使this post 中给出的答案对我也不起作用.
    【解决方案3】:

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

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

    【讨论】:

    • 要检查的文本不是大写字母而是复选框的值... :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 2012-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多