Jquery类选择器在ASP.Net Gridview中不起作用

时间:2014-06-02 17:45:50

标签: c# jquery gridview

使用下面的代码我试图在下拉列表的更改事件上编写一些验证代码" ddlAction"。

我尝试过几种方法,例如。

  1. $(".ddlAction").change(function () {

  2. $("#grdApproval").find("[id^='ddlAction']").change(function () {

  3. $("input[id*=ddlAction]").change(function ()

  4. $("input[value*=ddlAction]").change(function () {

    1. - >仅当我在gridview的第一页上时才有效。
  5. C#代码:

    <asp:TemplateField HeaderText="ACTION" ItemStyle-Width="10%">
        <ItemTemplate>
            <asp:DropDownList ID="ddlAction" CssClass="ddlAction" runat="server" BorderStyle="Solid" Width="150px" SkinID="GridEdit" ValidationGroup="Compensation" Enabled="true"/>
        </ItemTemplate>
    </asp:TemplateField>
    

    JQuery:

    $(function () {
        $(".ddlAction").change(function () {
        //$("#grdApproval").find("[id*='ddlAction']").change(function () {
        //$("input[id*=ddlAction]").change(function () {
        //$("input[value*=ddlAction]").change(function () {
            //do something;
        });
    });
    

    页面来源:

    <select name="ctl00$MainContent$grdApproval$ctl03$ddlAction" id="MainContent_grdApproval_ddlAction_1" class="ddlAction" style="color:Black;background-color:#FFFF99;border-style:Solid;font-family:Verdana;font-size:9pt;width:150px;">
    <option value="97" title="-----------Select-----------">-----------Select-----------</option>
    <option value="FS" title="Finalize-Submit">Finalize-Submit</option>
    <option value="NMR" title="Needs More Research">Needs More Research</option>
    

2 个答案:

答案 0 :(得分:0)

此:

$(".ddlAction").on('change', function () {

})

应该有效。它会将更改事件附加到页面上的每个.ddlAction下拉列表中,而不仅仅是表格

您没有显示gridview ID,我认为它是'#grdApproval'

因此,您的代码最好更改为:

$('#grdApproval').on('change','.ddlAction', function() {

})

这样它将使用事件委托。

如果您使用gridview的回调,或者在UpdatePanel中使用包裹的gridview

,它可能无法使用除第一页以外的页面

在这两种情况下,您需要在async-postback

之后重新设置处理程序

更新:如果您有更新面板,则需要执行以下操作:

   // lets say you have function that you call to init your page:

   function myInit() {
       $('#grdApproval').on('change','.ddlAction', function() {

       }) 
   }

   // and you calling it on page load
   $(document).ready(myInit)


   // add the following line, to run the same code on pageLoaded
   // for async postback driven by UpdatePanel 

   Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(myInit);

答案 1 :(得分:0)

下面的代码工作并通过在async-postback之后重新附加事件来解决问题

的JQuery:

function pageLoad(sender, args) {
$(document).ready(function () {
    $(".ddlAction").change(function () {
        var HFStatusChangedId = this.id.replace("ddlAction", "HFStatusChanged");
        if (this.selectedIndex !== "97") {
            document.getElementById(HFStatusChangedId).value = "Y";
        }
    });
});

}