DOBON.NET DOBON.NETプログラミング掲示板過去ログ

チェックボックスでJavaScriptのonfocusイベントをASP.NET上から作成したいが作成しても動作しません。

環境/言語:[WinXPSP2、C#、.NET Framework2.0 + Ajax(Microsoft Ajax Toolkit)]
分類:[ASP.NET]

こんにちは。アべです。

チェックボックスでJavaScriptのonfocusイベントを作成したいが
動作せずに困っております。

下記のコードを記述しておりますが、

if (CurrentControl is CheckBox)
{
(CurrentControl as WebControl).Attributes.Add("onfocus", "alert('focus');");
}

作成されるHTMLが

<span onkeydown="FocusScript('ctl00_ContentPlaceHolder1__dropDownListSumai');"
onfocus="OnFocus(this);">
<input id="ctl00_ContentPlaceHolder1__checkBoxOkuri"
type="checkbox" name="ctl00$ContentPlaceHolder1$_checkBoxOkuri" />
<label for="ctl00_ContentPlaceHolder1__checkBoxOkuri">指定あり</label>
</span>

となっており、なぜかspanタグにイベントがくっついてしまっております。

⇒テキストボックス、ドロップダウンリスト、リストボックス、ボタンは
このロジックで問題なく実装でき動作していますが、なぜか、
チェックボックスだけは動作しません。

また、回避策もわからずに困っています。

回避の方法や、この当りの問題に関する情報をお持ちの方アドバイスをお願いいたします。

宜しくお願い致します。
---
阿部清隆
こんにちは。アべです。
何とか対処療法で解決しました。

C#でイベントを追加するとspanタグにイベントが付加され、
これをどうしても回避できないということでJavaScriptの
処理でイベントを野追加を行いました。

追加してみたところ、どうもPOSTBACKするとイベントが消える
ことがわかり、仕方なく、毎回RegisterStartupScriptめそっで
イベントを追加することにしました。

引き続き正攻法なやり方があればアドバイスをお願いします。

とりあえず回避できたのでご報告まで。

---C#(POSTBACK時)
//CheckBoxの不具合対応
ScriptManager.RegisterStartupScript(
this.Page,
typeof(_Default),
"ScriptOnFocusByCheckBox",
SCRIPT_ONFOCUS_BY_CHECKBOX,
true);
---JavaScriptのコード
const string SCRIPT_ONFOCUS_BY_CHECKBOX =
@"
var elements = document.getElementsByTagName('input');
var onfocusHandler = function() {
try {
OnFocus(event.srcElement);
} catch (e) {debug('checkbox onfocus error:' + e.message);}
}

for (var i = 0; i < elements.length; i++) {
if (elements[i].type == 'checkbox') {
if (navigator.appVersion.match(/\bMSIE\b/)) {
//IEの場合の処理
elements[i].attachEvent('onfocus', onfocusHandler);
}
else {
elements[i].addEventListener('onfocus', onfocusHandler, false);
}
}
}";

---
阿部清隆
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板