如何防止JavaScript函数自动运行?
我在淘汰模型中定义了一个函数,如下所示。当用户单击列表上的“编辑地址”按钮时,将显示地址表并用所选地址填充它如何防止JavaScript函数自动运行?,javascript,knockout.js,Javascript,Knockout.js,我在淘汰模型中定义了一个函数,如下所示。当用户单击列表上的“编辑地址”按钮时,将显示地址表并用所选地址填充它 this.editAddress = function (address) { self.addressErrors([]); self.showAddressForm(1); self.formAddress(address); } 但是,此函数在定义后立即运行,表单显示在page
this.editAddress = function (address) {
self.addressErrors([]);
self.showAddressForm(1);
self.formAddress(address);
}
但是,此函数在定义后立即运行,表单显示在pageload上。我能做些什么来防止这种情况
下面是简化绑定的html列表
<ul data-bind="foreach: userAddresses">
<li>
<div>
<p data-bind="text: addressTitle"></p>
<p data-bind="text: nameSurname"></p>
<p>
<span data-bind="text: addressLine1"></span> <span data-bind="text: addressLine2"></span>
</p>
<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>
</div>
</li>
</ul>
也许你可以让动作发生在一个事件上,比如点击。我不熟悉knockout.js,但这可能会有所帮助
祝您好运。我认为它不会立即执行,我认为您的表单绑定正在执行它 特别是,这一行:
<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>
注意删除了$data。单击:需要一个函数引用
删除$data将立即停止绑定执行您的函数。在您导致立即调用$root.editAddress并返回“undefined”之前,您的click:实际上已绑定到undefined
请注意,knockout会自动将$data传递给函数,因此您不需要做任何棘手的事情。显示绑定到函数和模型定义的HTML按钮。当您像上面一样定义函数时,它将不会运行。您必须首先调用该函数。为了解决这个问题,我建议在函数中放置一个console.logmakedthere行,看看它是否正在运行。如果您有多个类似的函数,我建议您放置一个唯一的控制台日志。我想这个问题更多的是关于击倒点击绑定。不知怎的,它在bind上运行了定义的函数。我刚刚发现了这一点,你救了我回答自己的问题。这是对这个问题的一个很好的解释@阿扎德拉姆似乎总是在问了……之后马上给出答案:很高兴你把它整理好了。谢谢你指点文档。重新阅读,如果我使用像data bind=click这样的绑定:$root.editAddress$data,它将自动运行editAddress。
<p><button class="btn btn-default" data-bind="click: $root.editAddress">Edit address</button></p>