2

我有一个看起来像这样的简单文本字段。

<asp:TextBox ID="txtMyTextBox" runat="server" onblur="checkMyText()"  ></asp:TextBox>

在我的页面顶部,我有一点点 JS

<script type="text/javascript">
    function checkMyText() {
        var args = document.getElementById('<% =txtMyTextBox.ClientId %>').value;
        alert(args);
        }
</script>

这很好用。当我尝试这样做时。

 <asp:TextBox ID="txtMyTextBox" runat="server" onblur="checkMyText("txtMyTextBox")"  ></asp:TextBox>

. . .

 function checkMyText(ElementID) {
                var args =  document.getElementById('<% =ElementID.ClientId %>').value;
                alert(args)
                }

它失败。

我对 javascript 完全陌生,所以我不确定它如何处理传递变量或在字符串中处理它们。这个想法是,如果我添加一个: ID="txtMyOtherTextBox" 我只需要为该按钮调用 onblur="checkMyText("txtMyOtherTextBox")" 。我如何处理 javascript 字符串?

4

3 回答 3

3

在这一行

<asp:TextBox ID="txtMyTextBox" runat="server" 
      onblur="checkMyText("txtMyTextBox")"  ></asp:TextBox>

你有两个主要错误。

  1. 错误的配额->"checkMyText("txtMyTextBox")"
  2. 您传递的 ID 是您在后面的代码中看到的,而不是它在页面上呈现的。

this通常我们使用关键字将当前元素传递给 JavaScript 函数。例如:

<asp:TextBox ID="txtMyTextBox" runat="server" onblur="checkMyText(this)"/>

function checkMyText(me) {
                var args =  me.value;
                alert(args)
                }
于 2013-02-27T16:55:26.423 回答
2

您必须将文本框的 ClientId 传递给 javascript 函数。执行 Javascript 时不能使用服务器端代码(您试图通过调用ElementID.ClientIdjs 函数来执行此操作。

确定仍在服务器上的 ClientId 并将其作为字符串放入函数调用中:onblur="checkMyText('<%=txtMyTextBox.ClientId %>')"然后您可以在 javascript 函数中使用 id。

试试这个:

<asp:TextBox ID="txtMyTextBox" runat="server" onblur="checkMyText('<%=txtMyTextBox.ClientId %>')"></asp:TextBox>

<script type="text/javascript">
    function checkMyText(id) {
        var args = document.getElementById(id).value;
        alert(args);
        }
</script>
于 2013-02-27T16:51:23.470 回答
0

如果您查看您的页面源代码,您会发现 ASP.NET 破坏了您漂亮的可读 ID,以便在每个页面多次使用相同的“控件”(例如新闻小部件或其他东西)的情况下保持事物真正的唯一性)

我不喜欢 ASP.NET 的这方面,更喜欢手动管理我的 ID(并在有用的地方使用类),所以我ClientIDMode="Static"在我的 Page Directive 中使用。这会指示 ASP.NET 使用您在源代码中指定的 ID,从而使您能够完全按照您在第二个示例中描述的(当前)不起作用的方式进行操作。

也就是说,Aristos 的答案是首选的解决方案

于 2013-02-27T16:55:19.470 回答