2017-02-01 2 views
0

Ich versuche, ein Textfeld zu haben, wo, wie der Benutzer in das Textfeld eingibt die Beschriftung unten liest, wie viele Zeichen mit jquery übrig sind.jquery Code funktioniert nicht in aspx

Als ich den jquery Code unten in der normalen html Seite versuchte, funktionierte es wie erwartet .. aber wenn ich versuche, es in meiner aspx Seite zu machen, wird es das Etikett nicht aktualisieren.

Ich bin ein Anfänger zu jquery so bin ich nicht sicher, ob ich hier etwas fehlt bin .. Kann mir bitte jemand in die richtige Richtung ..

<%@ 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> 

Antwort

1

Betrachten wir eine normale jQuery ID-basierten Selektor:

$("#myElementID"); 

Nun nehmen Sie einen Blick auf Ihre Wähler:

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

Sie dieverloren haben, was jQuery sagt, dass Sie nach einer ID und nicht nach einem Knotentyp suchen. Aus diesem Grund finden Ihre Selektoren nichts.

Ihre Wähler Ändern Sie den # schließen, etwa so:

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

Und Sie sollten alle gesetzt!


Alternative Antwort:

Werfen Sie einen Blick auf diese Textbox:

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

Beachten Sie, wie ich ClientIDMode="static" hinzugefügt haben. Dies weist ASP an, das Steuerelement ohne Änderung der ID überhaupt zu rendern. Dies bedeutet, dass Sie einfach den Selektor $("#MyTextbox") in Ihrem jQuery verwenden können, und es wird das Textfeld finden.

HINWEIS: Sie nicht Verwendung dieses auf Elemente, die in einem sich wiederholenden Behälter sind, wie Gridviews oder Wiederholer. Da IDs eindeutig sein müssen, müssen die IDs unterschiedlich sein, wenn Sie doppelte Kopien dieses Textfelds haben. Verwenden Sie in solch einem Szenario die Verwendung ClientIDMode="predictable", die stattdessen einen Index an Ihre ID wie MyTextbox1, MyTextbox2 usw.

+0

hinzufügen Gosh !! Das hat funktioniert. Vielen Dank! – psj01

+1

@ psj01 Noch ein Hinweis: Wenn Sie keine Elemente verwenden, die sich wiederholen (wie in Gitternetzbildern oder Repeatern), beachten Sie, dass es eine ASP-Bedingung namens "ClientIDMode" gibt. Wenn Sie dies auf 'static' setzen, wird die ClientID ** genau ** rendern, wenn Sie sie in ASP deklarieren. So wird zum Beispiel eine Textbox mit 'id =" myTextBox "ClientIDMode =" statisch "' auf der Seite mit der ID 'myTextBox' gerendert. Keine Notwendigkeit mehr für Server-Tags in Ihrem jQuery! – Santi

+0

auch, wenn Sie mir nicht fragen, fragen .. warum brauche ich die "$ (document) .ready (function() {}" und haben den Schlüssel up-Code drin .. Wenn ich nicht habe, wird es nicht funktionieren .. – psj01

Verwandte Themen