2009-06-13 14 views

Antwort

3

Ändern Sie Ihr Markup, um "this" als Verweis auf das angegebene Kommentarfeld zu übergeben.

<asp:TextBox ID="tbComments" 
      onChange="javascript:checkLength(this);" runat="server"/> 

Dann in Ihrer checkLength() -Funktion, "e" ist eine direkte Bezugnahme auf das DOM-Element, das das onchange Ereignis ausgelöst hat.

function checkLength(e){ 
    alert(e.id); //id of the comments box 
    //get a reference to the span element immediately after the textbox 
    theSpan = e.parentNode.getElementsByTagName("span")[0]; 
    theSpan.innerHTML = "comments length: " + e.value.length; 
} 
+0

Ich würde lieber e.parentNode.getElementById stattdessen verwenden, Ich versuchte und es hat nicht funktioniert für mich, gibt es eine Möglichkeit? – Shimmy

+0

Da die IDs dynamisch generiert werden, ist die einzige Möglichkeit, einen Verweis auf den Bereich zu erhalten, die Position. –

+0

Die Client-ID des Labels entspricht der Client-ID des Textfelds mit dem Suffix "Label". Wenn Sie eines kennen, kennen Sie das andere. –

0

Sind Sie sicher, dass das Problem nicht nur das Fehlschlagen von "ClientId" in dem folgenden Tag ist? :-)

<span id="<%# tbComments.CliendId %>Label"></span> 
+0

Sorry, du hast Recht, aber das ist nicht das Problem. Das Problem ist, dass es dynamisch generiert wird, da es datengebunden ist. – Shimmy

0

Ist etwas falsch mit Ihrer JavaScript checkLength() - Funktion, die nicht an die Client ID anfügt? Dann haben Sie Javascript beide nehmen ?:

<asp:DataGrid> 
    <ItemTemplate> 
     1) 
     <asp:TextBox ID="tbComments" 
      onChange="javascript:checkLength(<%# tbComments.ClientId %>, <%# tbComments.ClientId %>Label);" 
      runat="server"/> 
     2) 
     <span id="<%# tbComments.ClientId %>Label"></span> 
    </ItemTemplate> 
</asp:DataGrid> 
1

einfach eine Klasse auf die Spanne hinzufügen oder das Textfeld ein und verwenden Sie jQuery das Element in der dom zu finden und ein Änderungsereignis in das Textfeld hinzufügen, führen Sie den Code checkLength

$(document).ready(function() 
{ 
    $('.myClass').change(function() 
    { 
     // do your length check... 
    }); 
}); 
+1

1) Ich benutze jQuery nicht in diesem Projekt 2) Wo gebe ich die ClientId ?? es scheint, dass Sie meine Frage nicht bekommen haben, aber stören Sie sich nicht, es ist bereits beantwortet worden. Danke für Ihre Mühe. – Shimmy

+1

$ (Dokument) .ready (Funktion() { $ ('. MyClass'). Change (function() { Bottich Textbox = $ (this); var Span = textbox.next(); span.html (Kommentare Länge: '. + textbox.val() Länge); }); }); – superlogical

+0

liebe dich, Mann. wird es sicher einmal verwenden. – Shimmy