KnockoutJS数据绑定:点击javascript点击

时间:2013-04-02 21:23:17

标签: javascript knockout.js

我们假设我们有一张表

<table>
    <tbody data-bind="foreach: orderItems">
        <tr class='datarow'>
            <td data-bind="text: whatever"></td>
            <td><a id='anchor' href='#' data-bind='click: $root.save' onclick='alert("a");'>Text</a></td>
        </tr>
    </tbody>
</table>

所以当我做的时候

document.getElementsById('anchor').click();

警报触发但$ root.save没有。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

Try This

<script type="text/javascript">
    var viewModel = {

        Save: function() {

            alret("Hello");
        }
    };
ko.applyBindings(new MyViewModel());
</script>
<table>
    <tbody data-bind="foreach: orderItems">
        <tr class='datarow'>
            <td data-bind="text: whatever"></td>
            <td><a id='anchor' href='#' data-bind='click: $root.save' onclick='alert("a");'>Text</a></td>
        </tr>
    </tbody>
</table>

答案 1 :(得分:1)

我发现代码有两个问题:

  1. getElementsById - 你确定这个方法存在吗?
  2. 每个ID只应在页面上存在一次。当你想通过它的ID找到一个元素时,可以调用getElementById(singular),它将返回一个元素。因为只有一个元素应该有给定的ID,所以没有getElementsById(复数)方​​法。

    您的foreach绑定与硬编码的“锚”ID结合将导致多个元素具有锚点ID。这是禁忌。也许使用一类'锚'而不是'锚'的id。

    <a class='anchor' href='#' data-bind='click: $root.save' onclick='alert("a");'>Text</a>
    

    所以我的猜测是getElementsById没有返回任何东西来点击。

    1. 点击()
    2. 即使你能够从getElementsById获取一个元素,这些元素上也没有click()方法。

      作为替代方案,您可以使用jQuery来获取元素,使用jQuery对象可以调用click()方法。或者您可以从getElementById返回一个元素,将其包装在jQuery中,然后调用click()。

      $('.anchor').click();
      

      以下是一个工作示例:http://jsfiddle.net/tlarson/t4yZL/1/

答案 2 :(得分:0)

<table>
    <tbody data-bind="foreach: orderItems">
        <tr class='datarow'>
            <td data-bind="text: whatever"></td>
            <td><a id='anchor' href='#' onclick='alert("a"); viewModel.save(ko.dataFor(this));'>Text</a></td>
        </tr>
    </tbody>
</table>
  • 假设您已将viewModel存储在其他位置。
  • ko.dataFor(element) - 返回可用于绑定元素的数据

您可以查看此link