2009-06-13 14 views

答えて

3

マークアップを変更して、指定したコメントボックスへの参照として「this」を渡します。

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

checkLength()関数では、 "e"はonchangeイベントを発生させたDOM要素への直接参照です。

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

私は代わりにe.parentNode.getElementByIdを使用することをお勧めします。 私は試してみましたが、それは私のためにはうまくいかず、何か方法はありますか? – Shimmy

+0

IDが動的に生成されるため、スパンへの参照を取得する唯一の方法は、その位置によるものです。 –

+0

ラベルのクライアントIDは、 "Label"接尾辞付きのテキストボックスのクライアントIDと同じです。したがって、あなたがどちらかを知っていれば、もう一方はわかります。 –

0

「ClientId」が次のタグに誤って入力されていないことを確認してください。 :-)

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

申し訳ありませんが、あなたは正しいですが、それは問題ではありません。 問題は、データバインドされてから動的に生成されることです。 – Shimmy

0

JavaScriptのcheckLength()関数は、クライアントIDにラベルを付加しないと間違って何かがありますか?次に、あなたはjavascriptの両方を取るている?:

<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

だけcheckLengthコード

を実行スパンまたはテキストボックスにクラスを追加し、DOM内の要素を見つけるために、jQueryのを使用して、テキストボックスに変更イベントを追加します
$(document).ready(function() 
{ 
    $('.myClass').change(function() 
    { 
     // do your length check... 
    }); 
}); 
+1

1)私はこのプロジェクトでjQueryを使用しません 2)どこでClientIdを渡しますか?それはあなたが私の質問を得ていないようだ しかし、自分自身を悩まさない、それはすでに答えられている。 あなたの努力に感謝します。 – Shimmy

+1

$(document).ready(function() { $( '。myClass')。change(function() {バットテキストボックス= $(この); VARスパン= textbox.next(); span.html(コメント長さ: '+ textbox.val()の長さ); }); })。 – superlogical

+0

あなたを愛してください。 は必ずそれを一度使用します。 – Shimmy

関連する問題