jQuery onClick在由KnockoutJS绑定的div中工作

jQuery onClick在由KnockoutJS绑定的div中工作,jquery,knockout.js,Jquery,Knockout.js,这是一个更有趣的快速问题 我有一个div,它使用Knockout JS在AJAX请求后绑定一组数据 <div data-bind="with: user" id="ActionWindow"> ...Stuff... </div> 东西 一切都很好 但是如果我想使用jQuery onCLick或onChange事件,我不能这样做: <div data-bind="with: user" id="ActionWindow"> <a class="Ne

这是一个更有趣的快速问题

我有一个div,它使用Knockout JS在AJAX请求后绑定一组数据

<div data-bind="with: user" id="ActionWindow">
...Stuff...
</div>

东西
一切都很好

但是如果我想使用jQuery onCLick或onChange事件,我不能这样做:

<div data-bind="with: user" id="ActionWindow">
<a class="NewGroupLink">Add New Group</a>
...Stuff...
</div>
<script>
$('.NewGroupLink').click(function () {
    alert('bob');
});
</script>

添加新组
东西
$('.NewGroupLink')。单击(函数(){
警惕(“鲍勃”);
});
这件事根本就没有发生

我可以在“a”中加一个onClick=“”,我希望这会起作用,但为什么不起作用呢

顺便提一下,如果链接在div之外,上述代码可以正常工作

谁能告诉我为什么?如果有办法让jQuery代码正常工作呢


非常感谢。

您的HTML代码是否在敲除中的
if
条件中?由于它们的工作方式(除非它们的计算结果为
true
),否则它们实际上不会插入包含的DOM节点),因此当您尝试钩住事件时,超链接实际上可能不在文档中

如果是这种情况,我的建议是使用以下代码钩住事件处理程序:

$('body').on('click', '.NewGroupLink', function() {
    ... 
});
这样,事件实际上附加到文档的主体,但处理程序的代码仅在事件发生在CSS类为
NewGroupLink
的元素上时执行


如果您的页面很大,那么如果您使用更接近实际链接但仍然是祖先的不同元素(而不是
body
),代码可能会更精确/性能更好。

如果您的目标元素是根据从ajax调用检索的数据创建的,然后,您需要使用委托以单击处理程序为目标(单击处理程序仅适用于处理程序最初运行时DOM中存在的元素)

$("#ActionWindow").on( "click", ".NewGroupLink", function() {
    alert( $( this ).text() );
});
尝试在上使用
()


东西
$('.NewGroupLink')。在('click',函数(){
警惕(“鲍勃”);
});

首先,将jquery事件与knockout一起使用是一种不好的做法。KO有自己的事件,因此如果您想将click handler和handler函数添加到视图模型中,并将click绑定添加到html元素中,请执行以下操作:

<a class="NewGroupLink" data-bind="click: onClickHandler">Add New Group</a>
添加新组

您的代码不起作用,因为查询代码是在呈现div内容之前执行的。因此,当它被调用时,链接不存在。这是由于带有
绑定的
发生的,它会等待调用
ko.applyBindings
,如果用户不为null,则呈现div。

嗨。这起作用了,但我不确定为什么。我没有答案ny条件语句。当按下按钮时,页面将被绑定…啊!我刚刚回答了我自己的问题。所有文本框仅在有数据时才会被绑定。this.selectedItem=data?data.jobtilenum:“;例如。因此,尽管我的链接没有数据绑定标记,它仍然不会在Dom上呈现。对吗?我相信你是正确的,因为
with
绑定的行为类似于
if
/
ifnot
。从文档中可以看出:with绑定将根据关联的值动态添加或删除子元素是否为null/undefined,如果尝试挂接事件时
user
为undefined/null,则按钮将不在页面上,因此
$('.NewGroupLink')。长度将为0,并且不会将事件处理程序挂接到任何对象。
<a class="NewGroupLink" data-bind="click: onClickHandler">Add New Group</a>