我们假设我们有一张表
<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没有。有什么想法吗?
答案 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)
我发现代码有两个问题:
每个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没有返回任何东西来点击。
即使你能够从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>
您可以查看此link