div click事件会自动在页面加载时触发

use*_*747 25 javascript knockout.js

我想创建一系列的html页面(egdiv有员工详细信息列表).当用户点击div时,我想导航到另一个页面.请看看这个.

问题是当我第一次加载页面时,div的click事件被触发了.如何避免在页面加载事件期间被触发的不必要的点击事件?

下面是我的HTML代码

<div data-bind="click: clickMe('ok1')">
    <h1>Emplyee details</h1>
    <p>This is test</p>    
</div>

<div data-bind="click: clickMe('ok2')">
    <h1>Emplyee details</h1>
    <p>This is test</p>    
</div>

var ViewModel = function(){
    var self = this;
    self.clickMe = function(url){   
        //This function is automatically getting called 
        //when page loads.
        alert(url);
    }
}
ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)

问候,Hemant

Jam*_*xon 50

您需要将函数传递给单击处理程序而不是单击函数的结果.

做好clickMe()火灾的方法,并将结果返回到处理程序.

执行所需操作的一种方法是将函数调用包装在匿名函数中,如下所示:

function(){ clickMe('params'); } 
Run Code Online (Sandbox Code Playgroud)

所以你得到:

<div data-bind="click: function(){ clickMe('ok1'); }">
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用方法bind上的函数clickMe传递所需的参数:

clickMe.bind($data, "param1")
Run Code Online (Sandbox Code Playgroud)

所以你得到:

<div data-bind="click: clickMe.bind($data, 'param1')">
Run Code Online (Sandbox Code Playgroud)

  • 您不需要视图模型上的方法,只需在匿名函数中执行您需要的操作:`&lt;div data-bind="click: function(){alert('ok1'); }"&gt;`或`&lt; div data-bind="click: function(){alert($data.xxxxx()); }"&gt;` (2认同)