2012-02-18 7 views
6

I am new to jQuery and I am using jQuery 1.7.1 to learn Knockout JS, I was following a video demo by the author. In his example he has a tag something like

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

and in the viewmodel he has something like

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

When I tried in my side when I click on the delete button I never see the console.log show up on the console window of the Chrome F12 screen. I have two part question here

  1. Is there something I am doing wrong which is preventing the console message to show up?
  2. If I do not have a class to do css, is there any other way to perform the same task in the viewmodel?

edit: I corrected my typo, the code has proper parenthesis (I use web matrix so it take care of those issues). Here is my 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> 

Here is my knockout viewmodel

/// <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);  
} 

उत्तर

2

ऐसा लगता है कि आपको पहले ही अपना पहला जवाब मिल गया है। क्लिक ईवेंट को बाध्य करने के "अन्य तरीकों" पर यदि आपके पास कक्षा का नाम नहीं है, तो कुछ विकल्प हैं। आप टैग में एक आईडी जोड़ सकते हैं, और इसे इस तरह से कॉल कर सकते हैं। या यदि आप कक्षा और न ही आईडी जोड़ना नहीं चाहते हैं, तो आप अपने दृश्य मॉडल पर एक विधि को आमंत्रित करने के लिए अंतर्निहित बाध्यकारी "क्लिक" के साथ डेटा-बाइंड सिंटैक्स का उपयोग कर सकते हैं (जाहिर है यह jquery evnet शैली नहीं है, तो यह आप पर निर्भर करता है कि आप अपनी घटनाओं को कैसे तार बनाना चाहते हैं)। इस तरह:

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

Are you getting any errors?

Have you loaded the jQuery.js and the knockout.js

please post the code of view model.


ah! got it you have a typo

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

DEMO

+0

कृपया मेरे संपादित नोट देखें। इसमें मेरे विचार और दृश्य दोनों हैं। – Nair

+0

टाइपो को हल करने में समस्या को हल नहीं किया गया है? – JIA

+0

जब मैंने कोड को कॉपी करने के बजाय प्रश्न बनाया, मैंने इसे टाइप किया, जबकि मैंने इसे टाइप किया, मैंने टाइपो को प्रश्न में बनाया लेकिन कोड में उचित खुलने और समापन पैराथेसिस था। – Nair

0

नायर पहले मुझे पता है कि क्या कर रहे हैं आप यहाँ करने के लिए अगर आप बटन काम करता है को नष्ट करना चाहते चाहते हैं। तो jQuery Ui के समारोह को दूर का उपयोग और अगर आप फिर कुछ बात सांत्वना देने चाहते हैं तो बस console.log बारे में ("आप को सांत्वना देना चाहते हैं");।

मैं अपनी लाइन लगता है function() { console.log("inside"; }); is wrong

0

मुझे लगता है कि यदि आप इसके बजाय नॉकआउट के लिए बाध्यकारी क्लिक पर देखने की सलाह देते हैं यादृच्छिक क्वेरी के साथ नॉकआउट मिश्रण करने से। क्लिक बाध्यकारी आपको क्लिक मॉडल में एक फ़ंक्शन पर क्लिक ईवेंट को बाध्य करने की अनुमति देगा।

+0

मैं सहमत हूं और मैं इसे http://knockoutjs.com/documentation/foreach-binding.html के आधार पर काम कर सकते हैं, लेकिन मैं और अधिक जानना जब मैं का उपयोग प्रश्न में आपका उल्लेख बाध्यकारी कारण है कि यह विफल हो रहा है दिलचस्पी है। – Nair

संबंधित मुद्दे