- PR -

Javascript でコントロール名の取得

投稿者投稿内容
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-12-24 11:00
お世話になります。

Javascript でお聞きしたいのですが、
DataList 内にイメージやボタン、リンクボタンなど配置(横に3つ並べる)しこの時、
<asp:LinkButton ID="LinkButton1" runat="server" Width="140px">LinkButton</asp:LinkButton>
<input id="Button2" style="width: 122px" type="button" value="パスを取得" onclick="DoCopy()" />
となっているコントロールが、吐き出されたコードをみると順に
 DataList1_ctl00_LinkButton1
 DataList1_ctl01_LinkButton1
       ↑ ここが変わっている
IDが変化しているため下記のコード(ID指定)では、うまくいきません。
下記コードを呼び出すときにボタンまたはリンクボタンの正しいIDを取得するにはどうしたらいいですか?教えてください。お願いします。

ASP.NET C#
追.
clipboard に関するをWEBアプリ内で使用すると何やらセキュリティ上の問題があるようですが、これっておもにパスワードなどコピペでしょうか?
ほかにもどのようなことが考えられるのでしょうか?


コード:
function DoCopy(){
  if(self.clipboardData){
     clipboardData.setData('text', document.all.DataList1_ctl01_LinkButton1.innerHTML);
     }
}

秋刀魚
会議室デビュー日: 2008/11/10
投稿数: 16
投稿日時: 2008-12-24 11:55
こんにちは。

このLinkButton は動的に生成されたものでしょうか?

だとしたら、プログラム内でCliendID を取得してやって変数として埋め込むという手が使えます。

http://japan.internet.com/developer/20060801/26.html

これはGridView とCheckBox での例ですが、プログラム側でClientID を取得し、
クライアント側のjavascript で使用する方法は参考になると思います。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-12-24 16:59
コード:
document.all["DataList1_ctl00_LinkButton1"]

とすればID=DataList1_ctl00_LinkButton1のコントロールが取得できます
つまり
コード:
document.all["DataList1_ctl0"+"0"+"_LinkButton1"]
document.all["DataList1_ctl0"+"1"+"_LinkButton1"]
document.all["DataList1_ctl0"+"2"+"_LinkButton1"]

こんな風にかけます

追記の件
クリップボードはローカル資源ですから
JavaScriptでアクセスしようとすれば
警告が出ます
SL
大ベテラン
会議室デビュー日: 2008/05/02
投稿数: 183
投稿日時: 2008-12-24 18:15
お世話になります。

試そうとしましたが、VBの文法を知らないため下記の部分をC#に書き換えられません。
特に、 CType これは、何をしていますか?
コード:
    ’On every page visit we need to build up the CheckBoxIDs array
    For Each gvr As GridViewRow In FileList.Rows
        ’Get a programmatic reference to the CheckBox control
        Dim cb As CheckBox = CType( _
            gvr.FindControl("RowLevelCheckBox"), CheckBox)

        ClientScript.RegisterArrayDeclaration("CheckBoxIDs", _
            String.Concat("’", cb.ClientID, "’"))
    Next



また、
> とすればID=DataList1_ctl00_LinkButton1のコントロールが取得できます
私もこの方法のようなことを選択しましたが、ここに出力されるIDは、常に不変であることが保証されているのでしょうか?

今回のこのIDを調べるために下記のようにしてコードをとりました。
window.showModelessDialog() で子ダイアログとしたため、右クリックメニュが出ない
コード:
window.onload = function(){
      var ele = document.getElementById("DataList1");
      clipboardData.setData('text', ele.innerHTML);
      alert(ele.innerHTML);
}



教えてください、お願いします。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-24 18:48
CType はキャストです。
Google で「CType」で検索してみてください
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2008-12-24 18:58
IDが保証されているかなんてわからないですね。
サーバ次第なので。
実際の運用環境(擬似環境)で確認するなり
マニュアルを見るなりサポートに問い合わせるなりするといいと思います。

King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-12-24 22:31
>> とすればID=DataList1_ctl00_LinkButton1のコントロールが取得できます
> 私もこの方法のようなことを選択しましたが、ここに出力されるIDは、常に不変であることが保証されているのでしょうか?

作り方によるんじゃないでしょうか。
それを確実にする為に秋刀魚さんは ID を動的に取得して
JavaScript も動的に生成する方法を提示されているのでは無いでしょうか。
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-12-24 23:16
?
別にID取らなくても・・・

>_ctl00_
左上から右下に向けてコントロール別のただの通し番号です。


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