2013-06-04 19 views
3

我有一个输入文本框,每当它失去焦点我想获取它的值函数中的文本。反应模糊事件在knockout.js

例如,如果输入"testimonials1",如何在blur事件的事件处理程序中获取该文本?

这就是我试过的。我将ProjectTestimonial作为对象,而不是用户键入的文本。

HMTL

<div class="ratingcontents" data-bind="foreach: ProjectTestimonial"> 
    <!--ko if: !Testimonialstext--> 
    <input type="text" placeholder="Testimonials" class="txttestimonials" 
    data-bind=" 
     text: Testimonialstext, 
     event: { 
     blur: $root.testimonialblurFunction.bind(SourceId, SourceText, Testimonialstext) 
     } 
    " 
    > 
    <!--/ko--> 
</div> 

JS

self.testimonialblurFunction = function (data, event, Testimonialstext) { 
    debugger; 
    alert(data.soid + Testimonialstext); 
} 
+0

为什么你认为输入的值会成为事件处理参数的一部分? – Tomalak

+0

我真的不知道!,你能纠正它吗? – patel

+0

另外,请解释*为什么*你想在'blur'处理程序中使用文本。在我看来,你并没有使用淘汰赛的权利。你需要展示你的视图模型('ProjectTestimonial'和其中的一切)。 – Tomalak

回答

7

所做用的是“文”在输入域结合,而不是“价值”结合的第一个错误。

关于事件处理程序,我不会这样做。我会使用knockout的“订阅”功能来监听observable的更改。

这里是一个Jsfiddle version of your code.我已经改变了你的标记来演示更清楚。

HTML

<div class="ratingcontents" data-bind="foreach: ProjectTestimonial"> 

    <input type="text" placeholder="Testimonials" class="txttestimonials" 
    data-bind="value: Testimonialstext" /> 

</div> 

的Javascript

function viewModel(jsModel){ 
    var self = this; 

    self.ProjectTestimonial = ko.utils.arrayMap(jsModel, function(item) { 
     return new testimonial(item); 
    }); 
} 

function testimonial(jsTestimonial){ 
    var self = this; 
    ko.mapping.fromJS(jsTestimonial, {}, self); 

    self.Testimonialstext.subscribe(function(){ 
     alert(self.SourceId() + self.Testimonialstext());   
    }); 
} 

var rawModel = [ 
    { 
     SourceId: '1', 
     SourceText: 'Foo', 
     Testimonialstext: 'Ahoy there.' 
    }, 
    { 
     SourceId: '2', 
     SourceText: 'Bar', 
     Testimonialstext: 'Blah blah blah' 
}]; 

ko.applyBindings(new viewModel(rawModel)); 
0

使用has focus,而不是结合。根据我的理解,一旦用户停止编辑,您需要文本框中的数据。这很简单。从knockout js文档页面查看这个例子。

<p> 
Hello <b data-bind="text:name"></b> </p> 
<input data-bind="value: name, hasfocus: editing" /> 

<p><em>Click the name to edit it; click elsewhere to apply changes.</em></p> 

视图模型

function PersonViewModel(name) { 
// Data 
this.name = ko.observable(name); 
this.editing = ko.observable(false); 

// Behaviors 
this.edit = function() { this.editing(true) } 
} 

ko.applyBindings(new PersonViewModel("Bert Bertington")); 

jsFiddle

+1

模糊对失去焦点很好:)上面的例子是用于切换。 – Eirinn

19

您可以使用事件,即接到任何JS事件:

<input name="id" data-bind="value: id, event: { blur: blurFunction }"> 

并在您的视图模型:

self.blurFuncion = function(){ 
    // this attacks when blur event occurs in input 
} 

那么简单。