在我的 Windows 8 WinJS 应用程序中,我有一个用 viewModel 填充的视图。ViewModel 包含绑定到我的 HTML 视图中的文本输入的可观察属性(通过 WinJS.Binding.as)。当我从 viewModel 更改此属性的值时,文本输入的值会更改,但是不会触发此文本输入的“onchange”事件。
有没有办法知道执行绑定的确切时间?为什么没有触发“onchange”事件?我想对视图背后代码中视图模型所做的更改做出反应。
在我的 Windows 8 WinJS 应用程序中,我有一个用 viewModel 填充的视图。ViewModel 包含绑定到我的 HTML 视图中的文本输入的可观察属性(通过 WinJS.Binding.as)。当我从 viewModel 更改此属性的值时,文本输入的值会更改,但是不会触发此文本输入的“onchange”事件。
有没有办法知道执行绑定的确切时间?为什么没有触发“onchange”事件?我想对视图背后代码中视图模型所做的更改做出反应。
问题看起来不是很清楚。其中一些细节可能会对您有所帮助。
如果您正在寻找可观察属性更改时的事件,您可以考虑使用bind 方法。
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';
要监听输入元素的变化,您可以监听 'change' 事件。
inputElement.addEventListener('change', function(evt)
{
// your code here.
});
您不能使用“更改”事件,因为它仅在输入失去焦点并且值更改时才会触发。您不能使用“input”事件,因为它会在“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 很重要,否则事件将在循环中触发。