【问题标题】:jquery event firing before knockout在淘汰赛之前触发jquery事件
【发布时间】:2016-06-17 21:02:05
【问题描述】:

我有下表

<table id="users">
  <tbody data-bind="foreach: AllItems">                      
    <tr class="master">                      
      <td>                              
        <button data-bind="click:$root.removeItem">Remove</button>                               
      </td>                     
    </tr>
    <tr>
      <td></td>
    </tr>
  </tbody>
</table>

我有一个 jquery 事件,它监听 tr 上的点击

$("#users").on("click",".master", function (e) {    
    $(this).next("tr").toggle();
    $(this).find(".arrow").toggleClass("up");
});

我也有淘汰赛 data-bind="click:$root.removeItem" 事件。

我的问题是 Jquery 事件在淘汰事件之前触发,并在编程时扩展下一个 tr。我只想在单击按钮时触发淘汰事件。谁能告诉我怎么做。

谢谢

【问题讨论】:

  • 解决方法很简单。不要使用 jQuery 敲除来处理事件和操作 DOM。扔掉 jQuery 并使用敲除进行所有 DOM 操作。使用css 绑定可以轻松切换类。

标签: javascript jquery knockout.js


【解决方案1】:

removeItem 函数可以接受两个参数,其中绑定到单击元素的对象和发送事件。所以它可以看起来像这样

self.removeItem = function(item, event){
    //DO what ever your removeItem function does

    // save clicked element to jquery obj
    var clickedRow = $(event.target);
    // do the same you did before in jquery event handler
    clickedRow.next("tr").toggle();
    clickedRow.find(".arrow").toggleClass("up");
}

HTML:

<button data-bind="click:$root.removeItem.bind()">Remove</button>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    相关资源
    最近更新 更多