【问题标题】:checkbox event is not firing with jquery复选框事件未使用 jquery 触发
【发布时间】:2013-08-12 06:40:14
【问题描述】:

我在父网格中有复选框行,在子网格中有复选框行,Hierarchy grid mode using kendo UI 也有。架构是这样的……

我在父网格中有四行,其中一列是复选框,对于每个父行,我都有一个包含 4 行的子网格和一个复选框列...

如果我单击父网格行中的复选框,我只需要访问与该行相关的子网格列中的复选框,并且需要将该子网格的选中属性设置为 true.....

为此,我正在访问这样的父网格复选框..

这是javascript函数

  <script type="text/javascript">
    $('.chkbxq').live('click', function (e) {
        alert('1'); // this alert is not firing 
        var checkchildgrid = $('#Gridparent').find(".k-detail-row").find('td.k-detail-cell').find('[type="checkbox‌​"]').is(':checked');
        alert(checkchildgrid);
        if ($(this).is(':checked')) {    
            checkchildgrid.attr('checked', 'checked');
        } else {
            checkchildgrid.attr('checked', false);
        }    
    });        
</script>

这是层次网格代码....

    @model IEnumerable<Topco.TopMapp.MVC.Models.CostPageSearch>
@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@using (Html.BeginForm())
{ 
   @(Html.Kendo().Grid<Topco.TopMapp.MVC.Models.CostPageSearch>()
        .Name("Gridparent")
        .Columns(columns =>
        {
            columns.Template(@<text></text>).ClientTemplate("<input id='chqprnt' class= 'chkbxq' type='checkbox'/>").Width(30);
            columns.Bound(e => e.CostPage).Width(100);
            columns.Bound(e => e.Description).Width(100);
            columns.Bound(e => e.VendorName).Width(100);
            columns.Bound(e => e.BillTypeDirect).Width(100);
            columns.Bound(e => e.BillTypeWarehouse).Width(100);
            columns.Bound(e => e.VendorName).Width(100);

        })
        .Sortable()
        .Pageable()
        .Scrollable()
        .ClientDetailTemplateId("client-template")
        .HtmlAttributes(new { style = "height:480px;" })
        .DataSource(dataSource => dataSource
            .Ajax()
            .PageSize(6)
            .Read(read => read.Action("HierarchyBinding_Employees", "CostPageDisplay"))
        )
        .Events(events => events.DataBound("dataBound"))
)
    <script id="client-template" type="text/kendo-tmpl">
         @(Html.Kendo().Grid<Topco.TopMapp.MVC.Models.ItemsDescriptionModel>()
            .Name("grid_#=CostPage#")
            .Columns(columns =>
            {
                columns.Template(@<text></text>).ClientTemplate("<input id='checkbox'  class='chkbx' type='checkbox' />").Width(30);
                columns.Bound(o => o.ItemId).Width(100);
                columns.Bound(o => o.ItemDescription).Width(100);
                columns.Bound(o => o.BrandCode).Width(100);
                columns.Bound(o => o.PackSize).Width(100);
            })
           .DataSource(dataSource => dataSource
               .Ajax()
               .PageSize(5)
               .Read(read => read.Action("HierarchyBinding_Orders", "CostPageDisplay" , new { employeeID = "#=CostPage#" }))
           )
           .Pageable()
           .Sortable()
           .ToClientTemplate()
   )
    </script>
<script>
    function dataBound() {
        this.expandRow(this.tbody.find("tr.k-master-row").first());
        //alert('1');
    }
</script>

但是当我点击父网格中的复选框时,点击事件没有触发......

有没有人能就这个问题提出任何想法和解决方案,非常感谢我.....

在此先感谢...

编辑:请您看看下面的图片,这是我放置复选框的位置,单击该复选框不会触发事件...

【问题讨论】:

  • live 在 jquery 1.9 中被移除,使用 .on 代替
  • 并包裹在$(function() {---}
  • 我使用的是jquery 1.7.1.js 版本..
  • 我仍然无法触发该事件...
  • @MohammadAdil 请您看一下我放置复选框的图像,我正在为此尝试触发检查事件

标签: javascript jquery kendo-ui kendo-grid kendo-asp.net-mvc


【解决方案1】:

试试这个,

 $('#Gridparent').on("click", ".chkbxq", function (e) {

       var selected = $(this).is(':checked');

        var grid = $("#grid12").data("kendoGrid");


        if (selected == true) {

            var check = $('.k-detail-row').find('td.k-detail-cell').find('div.k-grid').find('table').find('tbody').find('[type="checkbox"]').attr('checked', true);
            var asd = check.is(':checked');
            alert(asd);
        }

        });

使用网格点击。

【讨论】:

  • Jaimin 我遇到了同样的问题,例如如果我在父网格行中选择复选框,它将选择子网格行复选框(这里没有问题)但它也会选择所有其他父网格行复选框(问题在这里)
  • 我想再问一个问题,我无法获得子网格的行数,请您帮忙...
  • 嗯,我已经纠正了它现在工作正常...我需要遍历子网格中的所有行,因为我需要获取子网格行数.....我已经尝试过这些那些,但努力工作var childrowscount = $('.k-detail-row').find('td.k-detail-cell').find('div.k-grid').find('table').length;var anothergridcount = $('#GridParent').closest(".k-grid").data("kendoGrid").dataSource.total();var childrows = parentgrid.detailCell.find('&gt;.k-grid').data().kendoGrid.dataSource.total();这些
  • 对我来说效果很好。谢谢!
【解决方案2】:

这就是我想象的应该如何编码 - 免责声明我根本不懂剑道

如果我们需要在您写的时候处理复选框,我们可以这样做

$(function() {
  $('.chkbxq').on('click', function (e) {
    var checked = this.checked;
    $('#Gridparent').find(".k-detail-row").find('td.k-detail-cell').find('[type="checkbox‌​"]').each(function()
      this.checked=checked; // toggle
    });    
  });    
});        

如果内容是ajaxed,则需要

$(function() {
  $("#Gridparent").on('click','.chkbxq', function (e) {
    var checked = this.checked;
    $(this).find(".k-detail-row").find('td.k-detail-cell').find('[type="checkbox‌​"]').each(function()
      this.checked=checked; // toggle
    });    
  });    
});        

注意 .find 在 dom 中一直有效,所以也许你只是想要

$(this).find('[type="checkbox‌​"]').each(function()

【讨论】:

  • 谢谢,我可以触发那个事件,但是我不能设置那些是真的......你能帮我看看这个功能不起作用......$(this).find(".k-detail-row").find('td.k-detail-cell').find('[type="checkbox‌​"]').each(function()
  • 没有看到呈现的 html。你能用实际生成的html制作一个jsfiddle.net吗?
【解决方案3】:

如果有帮助,请参阅以下内容:

 <script type="text/javascript">

   $('.chkbxq').on('click', function (e) {

    alert('1'); // this alert is not firing 

    var checkchildgrid = $('#Gridparent').find(".k-detail-row").find('td.k-detail-cell').find('[type="checkbox‌​"]').prop('checked');
    alert(checkchildgrid);

    if ($(this).prop('checked')) {    
        checkchildgrid.prop('checked', 'checked');
    } else {
        checkchildgrid.prop('checked', false);
    }    
});        

希望对你有帮助。

【讨论】:

  • 我在 ie8 中遇到错误,比如 Object 不支持此属性或方法.....
  • 我已将调试器放入此单击函数中,这就是我收到该错误的原因,现在我删除了调试器我在 ie8 中没有收到任何错误...但我也没有收到该警报.. .
  • $('.chkbxq') 如果你改成那个 $('#chqprnt') 而不是这个,在那种情况下也不会触发???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2015-08-09
  • 2011-11-17
  • 2016-04-13
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多