在我的Windows 8 WinJS应用程序中,我有一个填充了viewModel的视图。 ViewModel包含可观察的属性(通过WinJS.Binding.as),该属性绑定到HTML视图中的文本输入。当我从viewModel更改此属性的值时,文本输入的值会更改,但不会触发此文本输入的“onchange”事件。
有没有办法知道进行绑定的确切时刻?为什么“onchange”事件没有被解雇?我想对视图后面的代码中viewModel所做的视图的更改作出反应。
答案 0 :(得分:2)
问题看起来不太清楚。其中一些细节可能会对您有所帮助。
如果您在可观察属性发生变化时寻找事件,可以考虑使用bind method。
var p = { name: 'martin' };
var o = WinJS.Binding.as(p);
o.bind('name', function onnamechange(newValue, oldValue)
{
console.log('property changed: ', oldValue, newValue);
});
o.name = 'mark';
要收听输入元素的更改,您可以收听“更改”事件。
inputElement.addEventListener('change', function(evt)
{
// your code here.
});
答案 1 :(得分:0)
您不能使用“更改”事件,因为只有在输入失去焦点并且值发生更改时才会触发它。您不能使用“输入”事件,因为它会在“keydown”上触发。查看这两个事件的文档:
更改:http://msdn.microsoft.com/en-us/library/windows/apps/hh441307.aspx
输入:http://msdn.microsoft.com/en-us/library/windows/apps/jj569354.aspx
您可以使用的是“onpropertychange”事件。我尝试了它,由于某种原因,它不适用于addEventListener(),但它适用于attachEvent()。
inpt.attachEvent("onpropertychange", function (e) {
if (e.propertyName == "value") {
inpt.style.background = "red";
}
})
检查propertyName非常重要,否则事件将在循环中触发。