我试图复制AngularJS website上的双向数据绑定示例。
这是我的代码(用简洁的JQuery说法):
$('#model-textbox').on('keyup', function(){
//get value of text box
var text_box_str = $(this).val();
//add it to the view
$('#view-div').html(text_box_str);
});
它按预期工作,但从释放密钥到显示文本时似乎存在某种延迟。这种延迟不会发生在AngularJS网站上。
我已经尝试了一个' keydown'事件变化(负责延迟),但看起来文本框值在.val()
调用之前未更新(因此我总是只有一键按下)。
如何使用keyup
,keydown
或任何其他方法实现快速查看更新?
答案 0 :(得分:2)
绑定input
以获得即时同步。 https://developer.mozilla.org/en-US/docs/Web/Events/input
var $view = $('#view-div');
var ie9 = navigator.appVersion.indexOf("MSIE 9.")!=-1;
var event = ('oninput' in document.documentElement && !ie9) && 'input' || 'keypress';
$('#model-textbox').on(event, function(){
var $el = $(this);
if(event === 'keypress') {
setTimeout(function(){ $view.text($el.val()); },0);
} else {
$view.text($el.val());
}
});
另外,请检查RivetsJS以获取在Angular之外支持此功能的小型库。 http://rivetsjs.com
修改:添加了事件支持检查,让您回过IE9(如果您关心此类事情。)
答案 1 :(得分:0)
我没有看到那么多延迟,但是如果你缓存jquery对象可能会有所帮助(DOM越大,这将有助于):
var $view = $('#view-div');
var $box = $('#model-textbox');
$box.on('keyup', function(){
//get value of text box
var text_box_str = $box.val();
//add it to the view
$view.html(text_box_str);
});