2017-02-01 65 views
0

我想要一个文本框,在用户在文本框中键入下面的标签时,会读取使用jquery留下多少个字符。jquery代码不能在aspx中工作

当我试图在常规的HTML页面下面的jQuery代码,它按预期工作..但是当我尝试在我的ASPX页面做它不会更新标签。

我是一个初学者jQuery的,所以我不知道如果我在这里失去了一些东西..是否有人可以指导我在正确的方向..

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPageToolkitScriptManager.master" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="DotNet_test" %> 

<%@ Register TagPrefix="uc" TagName="WebUserControl" 
    Src="~/Controls/WebUserControl.ascx" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolderHead" Runat="Server"> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderBody" Runat="Server"> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 


<script type="text/javascript"> 
    $(document).ready(function() { 

     $('<%= inp1.ClientID %>').keyup(function() { 
      var x = $('<%= inp1.ClientID %>').val().length; 
      //alert(x); 
      var y = 10; 
      $('<%= p1.ClientID %>').text("Len balance : " + (y - x)); 

      if ((y - x) < 0) { 
       $('<%= p1.ClientID %>').html("too much"); 
       $('<%= inp1.ClientID %>').val($('<%= inp1.ClientID %>').val().substring(0, 10)); 
      } 

     }); 

    }); 
</script> 

    <asp:TextBox ID="inp1" runat="server"></asp:TextBox> 

    <asp:Label ID="p1" runat="server" Text=""></asp:Label> 

<%--<input id="inp1"> 
<button id="b1">Click</button> 
<p id="p1"></p>--%> 


    </asp:Content> 

回答

1

考虑一个正常的基于身份的jQuery选择:

$("#myElementID"); 

现在,来看看你的选择:

$('<%= inp1.ClientID %>') 

你已经失去了#,这是什么告诉jQuery,你正在寻找一个ID而不是节点类型。正因为如此,你的选择器没有找到任何东西。

改变你的选择,以包括#,像这样:

$('#<%= inp1.ClientID %>') 

而且你应该准备就绪!


备选答案:

在这个文本框请看:

<asp:Textbox runat="server" id="MyTextbox" ClientIDMode="static"></asp:Textbox> 

通知我如何添加ClientIDMode="static"。这告诉ASP呈现控制而不改变ID为。这意味着你可以简单地在你的jQuery中使用选择器$("#MyTextbox"),它会找到文本框。

注:请在是重复的容器内的元素,如GridView的或中继器使用此。因为ID必须是唯一的,所以如果你要重复这个文本框,你需要不同的ID。在这种情况下,考虑使用ClientIDMode="predictable",而不是像MyTextbox1,MyTextbox2等附加索引到您的ID。

+0

天哪!这工作。非常感谢! – psj01

+1

@ psj01另一条建议:如果你没有使用会重复的元素(比如在gridviews或repeater里面),请注意有一个名为'ClientIDMode'的ASP条件。如果你将它设置为'static',那么当你在ASP中声明它时,ClientID将完全呈现**。因此,例如,带有id =“myTextBox”ClientIDMode =“static”'的文本框实际上将在ID为myTextBox的页面上呈现。不再需要jQuery中的服务器标签了! – Santi

+0

也,如果你不介意我问..为什么我需要“$(文档).ready(函数(){}”,并有密钥在里面的代码..如果我没有,它不会工作.. – psj01