如何防止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>