您的点击处理程序永远不会触发的原因是因为它从未应用于您的元素。因此,当您在 jquery 中执行此操作时:
$('.some-class').on('some-event', someFunction);
然后,要将处理程序绑定到该事件,首先 jQuery 必须找到您的$('.some-class')
选择器。在您的情况下,#btnParse
当您绑定事件时,很可能尚未通过敲除呈现到页面。或者,也有可能,原始元素被渲染、销毁,然后另一个元素被渲染。在第二种情况下,事件处理程序不会保留在按钮上。一种替代方法(我不推荐)是将处理程序绑定在 DOM 中更高的位置,例如在document
级别上,并将事件过滤到仅具有 id 的事件#btnParse
:
$(document).on('click', '#btnParse', function () { console.log('hi'); });
我不推荐这样做的原因是因为它是糟糕的淘汰赛做法,您应该按照click
其他一些帖子的建议使用绑定。此外,您正在使用 id 属性,这对于模板化动态内容通常不是一个好主意 - 除非您绝对需要唯一静态元素的 id,否则只需使用类。
至于如何正确使用 Knockout 的点击绑定,一件棘手的事情是您需要了解 Knockout 如何进行范围界定。例如,如果您在循环内绑定单击,并且您想要主视图模型中的处理程序,则必须引用父范围,因为循环会更改您的上下文:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction"></a>
<!-- /ko -->
此外,如果您需要更改处理程序使用 (the this
) 执行的 Javascript 上下文,则需要像这样绑定单击处理程序:
<!-- ko foreach: someCollection -->
<a data-bind="click: $parent.someFunction.bind($parent)"></a>
<!-- /ko -->
稍微玩一下这些东西,如果您仍然感到困惑,请提出一个新问题。祝你好运!