質問

jQueryを使用して、 ASP.NET (2.0)ドロップダウンリストの変更イベントはjQueryによって処理されます。問題は、ドロップダウンリストがグリッドビュー内にあり、ユーザーがそのグリッドビュー内の行を編集することを決定した場合のみであることです。

ASPコードブロックを使用してオブジェクトを取得していると思いますが、問題は、ページが最初に行の編集インデックスを読み込むときに存在せず、エラーをスローすることです。 IF ステートメント内にブロックを配置しても機能しません。

$(document).ready(function() //when DOM is ready, run containing code
{
    <% if (grvTimeSheets.EditIndex > -1) {%>
        $(#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>).change(function() {
             $(#<%= grvTimeSheets.ClientID %>).block({ message: null }
        });
}
);
<% } %>

これは私が試みた1つの試みであり、JavaScriptステートメントの外部にIFステートメントASPコードを配置しようとしました。動作しません。

どのようにしてドロップドロップボックスにjQueryイベントを適用できますか?理想的にはできるだけ簡潔に。


答えに感謝しますが、いや、機能しません:(。JavaScriptコードが出力されないようです...混乱しています...

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //When DOM is ready, run the containing code
    {

    }
    );
</script>

は出力です。これはコードですが:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.tablesorter.js"></script>
<script type="text/javascript" src="jquery.blockUI.js"></script>
<script type="text/javascript">
    $(document).ready(function() //when DOM is ready, run containing code
    {<% if (grvTimeSheets.EditIndex > -1) {%>
        var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
        $(id).change(function() {
             $(id).block({ message: null }
        });
     <% } %>
    }
    );
</script>

以前もそうしていたので、私はクレイジーになりました。


申し訳ありませんが、少しわかりやすくしてください。コードビハインドで全体を次のように定義してみました:

DropDownList ddl (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    $(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
          csm.RegisterStartupScript(cstype, csname1, script, true);
}

それはあなたの意図ですか?

ところで、上記は機能しませんでした。エラーはなく、イベントは機能しませんでした。

役に立ちましたか?

解決

いくつかのことをここに。

  1. セレクターを $()関数に渡すときは、セレクターを引用符で囲む必要があります。上記のコードスニペットは $(#some-generated-id)のようなものを生成しますが、動作しません。
  2. ステートメントがonready関数の外にある場合のサーバー側の閉じ中括弧。開始ifと同じレベルでネストする必要があります。

これを試してください:

$(document).ready(function() //when DOM is ready, run containing code
{
  <% if (grvTimeSheets.EditIndex > -1) {%>
      var id = '#<%=grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients").ClientID %>';
      $(id).change(function() { 
           $(id).block({ message: null }
        }); 
 <% } %>
}
);

機能しない場合は、生成されたjavascriptも貼り付けます。

他のヒント

これを使用:

cs.RegisterClientScriptBlock(cstype, csname, cstext2.ToString(), False)

スクリプトタグを含めているため、スクリプトタグを作成しないことはfalseです。 MSDNのドキュメントでは、フラグの説明が間違っています。

また、 jQueryではなく、コントロールのクライアントIDをコードビハインドから個別の変数に入れるだけですコード。

次に、jQueryコードで代わりにIDを含む変数を使用します。

コードビハインドで作成するスクリプトブロック内:

string script = @"<script type=text/javascript> var myControlId = '" + ddl.ClientId  "';") + "</script>"

この構文は検証しませんでしたが、近いはずです。 grvTimeSheets.ClientID の追加の構文を自分で追加できます。これが機能するようになったら、JavaScript配列を作成してClientIdをそのように保存するように変更し、作業する必要があるグローバルなJavaScript変数が1つしかない場合があります。

別のオプションは、探している要素に、その動作を説明するクラス名を与えるだけです。次に、jQueryコードが本当に明確になります。

$(function() {
    $("select.yourMarkerClass").change(....);
});

編集行がない場合、このコードは何もしません。セレクタに一致する要素がある場合、新しい動作が追加されます。

同じIDをページの他の場所で使用していない場合は、 ASPを阻止できます。 NET のUniqueIDとjQueryの高度なセレクタの1つ:

$('[id$=ddlClients]')

これは、全体ではなくID文字列の最後にのみ一致します。コントロールが異なる行内に複数回存在する場合、これはすべてのインスタンスに一致することに注意してください。

その他の例については、 セレクター を参照してください。

Page.ClientScript プロパティを使用して、jQueryでアクセスする必要があるIDを含むスクリプトブロックを登録します。

外部ファイル内のJavaScriptの例を次に示します。

var myFancySelector = '#' + myControlId;
selectedValue = $(myFancySelector).val();

myControlIdはコードビハインドから定義され、ClientScriptBlockに登録されます。

キーには任意のものを使用できますが、一意である必要があります。

週末の後にもっと試してみます。ただし、これはコードでした:

DropDownList ddl = (DropDownList)grvTimeSheets.Rows[grvTimeSheets.EditIndex].FindControl("ddlClients");
if (ddl != null)
{
    ClientScriptManager csm = Page.ClientScript;
    Type cstype = this.GetType();
    String csname1 = "PopupScript";

    string script = @"
    <script language='javascript' type='text/javascript'>
    jQuery(#" + ddl.ClientID + ").change(function() { $(" + grvTimeSheets.ClientID + ").blockUI({ message: null }});} </script>";
    csm.RegisterStartupScript(cstype, csname1, script, false);

各行にドロップダウンがあるため。各ドロップダウンには一意のClientIdがあるため、Benが提案したことを行うことをお勧めします。クラスセレクターは最も簡単なソリューションであるため、使用します。

または、編集クリックでJavaScript関数を作成し、編集中の行のドロップダウンの一意のクライアントIDを取得できます。

申し訳ありませんが、コードを詳しく読んでおくべきでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top