- PR -

ListBoxでJavaScripを呼び出す方法

1
投稿者投稿内容
鷹ひろ
会議室デビュー日: 2007/06/21
投稿数: 7
投稿日時: 2007-07-02 13:59
現在
開発環境:Windows XP Professional
実行環境:Windows Server 2003(IIS6.0、.Net FrameWork2.0)
でWebアプリを作成しております。
asp:ListBoxコントロールのOnSelectedIndexChangedイベントで、JavaScriptを
実行する方法がわからず困っております。
例えばButtonコントロールであれば
<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="alert('test');" />
とすれば、ボタンを押した時に、「test」と画面上に表示されるのですが、
<asp:ListBox ID="ListBox1" runat="server" OnSelectedIndexChanged="alert('test');">としてコンパイルをすると、
「CS1012: 文字リテラルに文字が多すぎます。」とコンパイルエラーが起きてしまいます。
試しに、C#側で
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ListBox1.Attributes["OnSelectedIndexChanged"] = "alert('test');";
}
}
としても、コンパイルは通るのですが、ListBoxのItem選択を変えても無反応です。
この件に関して、何か参考になることをご存知の方は、何でも構いませんので、
ご協力くださいませ。


tkrn
ベテラン
会議室デビュー日: 2005/10/25
投稿数: 61
投稿日時: 2007-07-02 14:18
> ListBox1.Attributes["OnSelectedIndexChanged"] = "alert('test');";

ListBox1.Attributes.Add("onchange", "alert('test');");

ですか?
OnSelectedIndexChangedは、サーバサイドのイベントです。
鷹ひろ
会議室デビュー日: 2007/06/21
投稿数: 7
投稿日時: 2007-07-02 14:22
tkrnさん、ご回答ありがとうございます。
ListBox1.Attributes.Add("onchange", "alert('test');");
でJavaScriptが実行されました。誠にありがとうございました。
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-07-02 15:24
解決はされたようですが。
とりあえず、生成されたHTMLのソースを見るくらいは、しても良いのでは。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-07-03 06:36
引用:

<asp:ListBox ID="ListBox1" runat="server" OnSelectedIndexChanged="alert('test');">


クライアントサイドとサーバーサイドのイベントを混乱しているようですね。

HTMLコントロール、サーバーコントロールの違いとクライアント/サーバーサイドのイベントの違いをしっかり押さえた方がよろしいかと。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
鷹ひろ
会議室デビュー日: 2007/06/21
投稿数: 7
投稿日時: 2007-07-03 12:41
mioさん書き込みありがとうございます。

>解決はされたようですが。
>とりあえず、生成されたHTMLのソースを見るくらいは、しても良いのでは。

確かにその通りですね。ご指摘ありがとうございます。
生成されたHTMLのソースを確認しましたところ、下記の通りで、
onchange="alert('test');"が追加されておりました。
-------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
無題のページ
</title></head>
<body>
<form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MDAwMjQ0MjIPZBYCAgMPZBYCAgEPEA9kFgIeCG9uY2hhbmdlBQ5hbGVydCgndGVzdCcpOw8WA2YCAQICFgMQBQVJdGVtMQUFSXRlbTFnEAUFSXRlbTIFBUl0ZW0yZxAFBUl0ZW0zBQVJdGVtM2dkZGRujmLvy8u3COEC9w0dIgyyURXy3A==" />
</div>

<div>
<select size="4" name="ListBox1" id="ListBox1" onchange="alert('test');">
<option value="Item1">Item1</option>
<option value="Item2">Item2</option>
<option value="Item3">Item3</option>

</select>
</div>

<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBAKstZDRDgKix/L5CwKdx/L5CwKcx/L5C4Yq+opk/fmPmtaYOwa7IvR8N9Wb" />
</div></form>
</body>
</html>
-------------------------------------------------------------------------------

Accessさん書き込みありがとうございます。
>クライアントサイドとサーバーサイドのイベントを混乱しているようですね。
>HTMLコントロール、サーバーコントロールの違いとクライアント/サーバーサイド
>のイベントの違いをしっかり押さえた方がよろしいかと。
はい、勉強します。できるだけ処理はクライアント側で行うよう、考えておりまして、
不慣れなせいか、サーバサイドとクライアントサイドの処理をごっちゃになって
おりました。

皆様本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)