javascript - Vanilla Javascript 文本框数据绑定(bind),如 AngularJS

标签 javascript angularjs

我正在尝试在 AngularJS website 上复制双向数据绑定(bind)示例.

这是我的代码(为简洁起见用 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() 调用之前没有更新(所以我始终在后面按一个键)。

如何使用 keyupkeydown 或任何其他方法实现快速 View 更新?

最佳答案

绑定(bind)输入以获得即时同步。 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(如果您关心这些事情。)

关于javascript - Vanilla Javascript 文本框数据绑定(bind),如 AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33244273/

相关文章:

javascript - AngularJS 工作一次然后不再渲染

javascript - 无法让 Array.indexOf 方法在 Javascript 中工作

Javascript 搜索数组列表的数组

javascript - 带有提交输入的 AngularJS ajax 表单提交

angularjs - 删除 NG-repeat Protractor 中的一条记录

javascript - 为什么我无法访问指令 html 中的 Controller 功能?

javascript - 将 javascript 函数显示为纯文本

javascript - 非常酷的 JS 工具 : does anybody know what this is?

javascript - 如何屏蔽文本输入中输入的字符而不导致模型验证失败?

jQuery:操纵 CSS