如何防止JavaScript函数自动运行?

时间:2014-07-02 23:07:09

标签: javascript knockout.js

我在淘汰模型中定义了如下函数。当用户点击列表上的编辑地址按钮时,这将显示地址表单并用选定的地址填充。

        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>

2 个答案:

答案 0 :(得分:0)

也许您可以在某个事件上执行操作,例如点击。我对knockout.js不熟悉,但这可能会有所帮助。

http://knockoutjs.com/documentation/click-binding.html

祝你好运。

答案 1 :(得分:0)

我认为它不会立即执行,我认为你的表单绑定正在执行它。

特别是,这一行:

<p><button class="btn btn-default" data-bind="click: $root.editAddress($data)">Edit address</button></p>

请注意,您的点击约束是$root.editAddress($data)

将您的绑定更改为以下内容:

<p><button class="btn btn-default" data-bind="click: $root.editAddress">Edit address</button></p>

请注意删除($data)click:需要一个函数引用。

删除($data)将阻止绑定立即执行您的功能。 (在您导致$root.editAddress被立即调用之前,它会返回&#39; undefined&#39;,因此您的click:实际上已绑定到undefined。)

请注意,淘汰赛会自动将$data传递给您的功能,因此您不需要做任何棘手的事情。