如何使用$(document).on(“点击..开启

时间:2012-02-18 04:40:02

标签: jquery knockout.js

我是jQuery的新手,我正在使用jQuery 1.7.1来学习Knockout JS,我正在关注作者的视频演示。在他的例子中,他有一个类似

的标签
<a href="#" class="button-delete">Delete</a>

并且在viewmodel中他有类似

的东西
$(document).on("click", ".button-delete", function() { console.log("inside"); });

当我点击删除按钮时,当我尝试在我身边时,我从未看到console.log出现在Chrome F12屏幕的控制台窗口上。我在这里有两个问题

  1. 我做错了什么导致控制台消息无法显示?
  2. 如果我没有班级来做css,还有其他方法可以在viewmodel中执行相同的任务吗?
  3. 编辑: 我纠正了我的错字,代码有正确的括号(我使用web矩阵,因此它处理这些问题)。这是我的HTML

    <!DOCTYPE html>
    <script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
    <script src="Scripts/knockout-2.0.0.js" type="text/javascript"></script>
    <script src="Scripts/ViewModel.js" type="text/javascript"></script>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <link href="assets/css/bootstrap.min.css" rel="stylesheet">
    </head>
    <body onload="init()">
        <input data-bind="value: tagsToAdd"/>
        <button data-bind="click: addTag">Add</button>
       <ul data-bind="foreach: tags">
               <li>
                   <span data-bind="text: Name"></span>
                   <div>
                       <a href="#" class="btn btn-danger" >Delete</a>
                   </div>
               </li>
       </ul>
    </body>
    </html>
    

    这是我的淘汰视图模型

    /// <reference file="jquery-1.7.1.js" />
    /// <reference file="knockout-2.0.0.js" />
    
    var data = [
       {Id: 1, Name: "Ball Handling" },
       {Id: 2, Name: "Shooting" },
       {Id: 3, Name: "Rebounding" }
    ];
    
    function viewModel()
    {
        var self = this;    
        self.tags = ko.observableArray(data);
         self.tagsToAdd = ko.observable("");
    
        self.addTag = function() {
           self.tags.push({ Name: this.tagsToAdd() });
           self.tagsToAdd("");
        }
    }
    
    
    $(document).on("click", ".btn-danger", function () {
        console.log("inside");
        });
    
    
     var viewModelInstance;
    function init(){
        this.viewModelInstance = new viewModel();
        ko.applyBindings(viewModelInstance);    
    }
    

4 个答案:

答案 0 :(得分:21)

你有任何错误吗?

您是否加载了jQuery.jsknockout.js

请发布视图模型代码。


啊!得到它你有一个错字

$(document).on("click", ".button-delete", function() {
//   console.log("inside";   <-- here it is
    console.log("inside");
 });

DEMO

答案 1 :(得分:2)

看起来你已经得到了第一个答案。在&#34;其他方式&#34;如果你没有绑定click事件;有一个类名,有几个选项。您可以为标记添加ID,并以此方式调用它。或者,如果您不想添加类或ID,则可以使用数据绑定语法和&#34;单击&#34;内置绑定以在视图模型上调用方法(显然这不是jquery evnet样式,因此您可以根据自己的需要连接事件)。像这样:

<button data-bind="click: someMethod">Click me</button>

答案 2 :(得分:0)

Nair首先让我知道你想在这做什么 如果你想删除按钮工作。然后使用jquery Ui的remove函数,如果你想控制一些东西,那么只需编写console.log(“你想要控制台”);

我认为你的行function() { console.log("inside"; }); is wrong

答案 3 :(得分:0)

我建议您查看敲除的click绑定,而不是将knockout与随机查询混合。单击绑定将允许您将click事件绑定到视图模型中的函数。