Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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事件未绑定到敲除条件元素_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript jQuery事件未绑定到敲除条件元素

Javascript jQuery事件未绑定到敲除条件元素,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我有一个简单的loggedIn属性作为一个ko绑定作为一个布尔值,因此当一个人登录时(一个带有异步xhr以确认服务器端的检查),标题中应该显示一个元素: <!-- ko if: loggedIn --> <div class="loggedin"> <a class="logout">Log Out</a> </div> <!-- /ko --> <!-- ko ifnot: loggedIn --> &l

我有一个简单的
loggedIn
属性作为一个
ko
绑定作为一个布尔值,因此当一个人登录时(一个带有异步xhr以确认服务器端的检查),标题中应该显示一个元素:

<!-- ko if: loggedIn -->
<div class="loggedin">
  <a class="logout">Log Out</a>
</div>
<!-- /ko -->

<!-- ko ifnot: loggedIn -->
<div class="loggedout">
  <a class="login">Log In</a>
  <a class="signup">Signup</a>
</div>
<!-- /ko -->
如果我刷新页面,它会工作,但任何动态更改都会使我无法绑定到单击(或任何其他)事件


更新:我创建它是为了说明这个问题

一个很好的方法是在你的虚拟机中有一个函数来完成这项工作,而不是依赖jquery事件。然后将click事件绑定到函数

<div class="loggedout" data-bind="click: someVMFunction">
<a class="login">Log In</a>
<a class="signup">Signup</a>
</div>

登录
报名

我找到的解决方案是使用
ko
可见

<div class="loggedin" data-bind="visible: loggedIn()">
   <a class="logout">Log Out</a>
</div>

<div class="loggedout" data-bind="visible: !loggedIn()">
   <a class="login">Log In</a>
   <a class="signup">Signup</a>
</div>

注销
登录
报名

它似乎工作得很好,允许jQuery毫无问题地绑定元素。

我同意,并尝试通过
ko
单击进行绑定,但是当我们添加一个包含登录/注册的下拉列表时,仍然存在问题。另一件事是,这是在一个中央控制器上,我们正试图保持干净,并将dom关注点分离到一个util文件中。我理解,从我所看到的情况来看,您的代码应该正常工作,所以我不是问题所在,我想点击绑定将是一个很好的建议。我同意,谢谢。我一直认为我的代码中缺少了一些东西,直到我找到了关于类似问题的其他帖子(尽管似乎没有一个帖子有解决方案)
if
(和
ifnot
)绑定使用子项作为模板。当绑定到它的可观察对象发生变化时,子对象将重新渲染。因此,绑定到子级的任何事件处理程序都将丢失<当您不能或不想绑定子级(性能问题或绑定到尚不存在的子属性)时,code>if
是一个不错的选择。在您的情况下,
可见
非常合适,因为它只需切换
显示
样式。另一种选择是在
上指定你的
,使目标处于更高的级别(
$(“.someParent”)。在(“click”、“.logout”、function(){};
)。
<div class="loggedin" data-bind="visible: loggedIn()">
   <a class="logout">Log Out</a>
</div>

<div class="loggedout" data-bind="visible: !loggedIn()">
   <a class="login">Log In</a>
   <a class="signup">Signup</a>
</div>