Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery插件不能与Knockout一起使用_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript jQuery插件不能与Knockout一起使用

Javascript jQuery插件不能与Knockout一起使用,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我是新手,但已经使用jQuery有相当一段时间了。在我目前正在进行的一个项目中,我们使用了淘汰视图模型 但是,我们也为选项卡、覆盖等使用了几个jQuery插件。当不使用KO时,或者在容器外部使用数据绑定时,这些插件都可以正常工作。例如,当触发器被放置在绑定到KO的容器中时,jquerytools的Overlay插件就不起作用 下面是一个简单的示例,其中包含一个从不触发的jQuery事件: <div data-bind="with: dummyData"> <a clas

我是新手,但已经使用jQuery有相当一段时间了。在我目前正在进行的一个项目中,我们使用了淘汰视图模型

但是,我们也为选项卡、覆盖等使用了几个jQuery插件。当不使用KO时,或者在容器外部使用
数据绑定时,这些插件都可以正常工作。例如,当触发器被放置在绑定到KO的容器中时,jquerytools的Overlay插件就不起作用

下面是一个简单的示例,其中包含一个从不触发的jQuery事件:

<div data-bind="with: dummyData">
    <a class="alert" href="#">Never fires!</a>
</div>
<div>
    <a class="alert" href="#">Works!</a><br /><br />
    <a href="#" data-bind="click: $root.showHidden">Show hidden link.</a>
</div>
KO是用不同的内容替换第一个容器还是更新DOM使jQuery click事件不再工作

我知道KO有自己的
点击:
事件。我经常使用它,但现在我只想知道是否仍然可以用jQuery绑定click事件,特别是因为我想用它来绑定对象的click事件的一些jQuery插件。

用于绑定click事件:

$(document).ready(function () {
    $('a.alert').live('click', function () {
        alert('Clicked!');
    });
});

这里是工作小提琴:

在引擎盖下,KnockoutJS认为带有
绑定的
模板
绑定的特例!每当viewmodel中的可观察对象发生更改时,
的每个子代都会被删除并重新创建,当这些DOM元素被删除时,jQuery处理程序也会被删除。在高于模板绑定级别的级别上使用
.on
是解决此问题的一种方法。不过,对我来说,点击点击绑定似乎是一个更好的选择。

你的代码对我来说很有用。这是提琴:对不起,是的,这很有效。我已经更新了你的小提琴:。单击“Show hidden”链接,hidden上的jQuery事件将永远不会触发……正如快速补充一样,jQuery已经弃用了
.live
,而倾向于与父选择器参数一起使用。Artem的答案仍然有效,只是不是推荐的风格。因此,与其说是
$('a.alert').live('click'
),不如说是
$('body')。在('a.alert','click'
)。
$(document).ready(function () {
    $('a.alert').live('click', function () {
        alert('Clicked!');
    });
});