1

私はJavaScriptに非常に慣れていないので、これに困惑しています。をjs 関数に送信ClientIDしようとしています。Control次に、関数は要素を見つけてControl's値を取得する必要があります。注: 私はマスター ページを使用してControlClientIDますUserControl

ASP:

//code here

<asp:TableCell runat="server">
    <asp:DropDownList runat="server" ID="variableDDL"/>
    //some ListItems
</asp:Tablecell>

//more cells here

<asp:TableCell runat="server">
    <asp:ImageButton runat="server" ID="iButton" ImageUrl="~/Images/iButton.png" OnClientClick="iButtonClick(<%=variableDDL.ClientID%>);"/>
</asp:TableCell>

//code here

.js:

function iButtonClick(ClientID)
{
    var v = document.getElementById(ClientID);
    var val = v.value;
    alert(val);
}

ボタンをクリックするたびに、何も起こりません。sent パラメータを に変更すると<%#variableDDL.ClientID%>、同じことが行われます。'<%=variableDDL.ClientID%>'またはに変更すると'<%#variableDDL.ClientID%>'、オブジェクトが見つからないため、null ポインター エラーが発生します。スクリプトは正しく参照されており、パラメーターを受け入れずにアラートを生成するように変更すると起動します。私が間違っていることを知っている人はいますか?

編集: 要求されたコードを以下に示します。

ASP ユーザー コントロール:

protected void Page_Init(object sender, EventArgs e) {
    DataTable fields = (DataTable) Session["fields"];
    for(int i = 0; i < fields.Rows.Count; i++)
    {
        variableDDL.Items.Add(new ListItem(fields.Rows[i]["Field"].ToString(), fields.Rows[i]["Field"].ToString();
    }
}

レンダリングされた OnClick HTML: '<%=variableDDL.ClientID%>'を生成します

onclick="iButtonClick(&#39;&lt;%=variableDDL.ClientID%>&#39;);"

<%=variableDDL.ClientID%>生産する

onclick="iButtonClick(&lt;%=variableDDL.ClientID%>);"

'<%#variableDDL.ClientID%>'生産する

onclick="iButtonClick(&#39;&lt;%#variableDDL.ClientID%>&#39;);"

<%#variableDDL.ClientID%>生産する

onclick="iButtonClick(&lt;%#variableDDL.ClientID%>);"
4

3 に答える 3

2

見た目からして、

OnClientClick="iButtonClick(<%=variableDDL.ClientID%>);"

文字通りレンダリングされています-山括弧の内容を置き換えていません。

試す

OnClientClick='iButtonClick("<%=variableDDL.ClientID%>");'

プロパティの一重引用符 (これは違いがあると思います) と二重引用符に注意してください。結果は JavaScript 文字列リテラルになります。

これが機能しない場合は、設定する必要があるかもしれません

iButton.OnClientClick = "iButtonClick('" + variableDDl.ClientID + "');";

コードビハインドのイベントで。

于 2013-01-09T13:50:51.850 に答える
1

jQuery に反対していない場合は、select 要素に識別クラスを追加することで、この操作を簡単に実行できます。これは、一意のクライアント ID を取得するためです。

<select id="variableDDL" class='varddl'>
  <option value="1">Value 1</option>
  <option value="2">Value 2</option>
  <option value="3">Value 3</option>
</select>
<button id="btn1" type="button">Click here</click>


$("#btn1").click(function(e){
  var v = $(".varddl:first-child").val();
  alert('Value of '+ $(".varddl:first-child").attr('id') + 'is ' + v);

});

フィドルを表示するには、ここをクリックしてください

更新: 純粋な JS バージョン

function btnClick(e){
   //Select the first occurance, [0]
   var ele = document.getElementsByClassName('varddl')[0];
      if(ele){
         //There's the value
         var val = ele.value;
         alert(val);
      }
}
var btn1 = document.getElementById("btn1");
btn1.onclick = btnClick

;

これがJSのみのフィドルです

于 2013-01-08T21:29:13.197 に答える
0

これが ASP.Net の仕組みです。ASP.Net WebControls 内でサーバーコード (<%%>) を使用することはできません。

これは、ClientID を JavaScript コードに直接入れることで解決できます。

function iButtonClick()
{
    var v = document.getElementById('<%= variableDDL.ClientID %>');
    var val = v.value;
    alert(val);
}

オブジェクト自体のみを送信できるという制限付きで、OnClientClick でオブジェクトを直接渡すこともできます。

OnClientClick="ButtonClick(this);"
于 2013-01-09T13:52:44.100 に答える