为了账号安全,请及时绑定邮箱和手机立即绑定

当我通过 jQuery 从外部更新输入字段时,jsRender 对象未更新(在旧版本中工作)

当我通过 jQuery 从外部更新输入字段时,jsRender 对象未更新(在旧版本中工作)

慕田峪7331174 2023-04-27 16:33:53
我想在外部更新输入字段(通过 jQuery),我希望关联的对象也能更新,就像我只是手动将值键入输入字段一样。这是我的 html:<div id="content"></div>    <button id="btn">Put "Hello" in content.</button>这是我的模板:<script id="myTmpl" type="text/x-jsrender"><div><input type="text" id="title" data-link="{:Title trigger=true:}" /></div></script>这是我的代码:<script type="text/javascript">obj = { Title: 'Hey' }var tmpl = $.templates('#myTmpl');tmpl.link('#content', obj);$('#btn').click(function() {    $('#title').val('Hello').change();});</script>问题是当我按下按钮时,值正确进入输入字段但对象 (obj) 未更新(当我在调试器中查看它时)。当我直接在输入字段中键入值时,对象会正确更新。这里的正确方法是什么。有趣的是,在我将 jsViews 版本从 0.9.71 更改为 1.0.7 之前,它一直正常工作。这是 0.9.71 的版本: https: //jsfiddle.net/zhsmn1eg/ 这是 1.0.7 的版本: https: //jsfiddle.net/zhsmn1eg/1/
查看完整描述

1 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

行为上的差异是因为早期版本会监听s 上的changekeydown事件<input>以触发可观察到的数据更改。随后HTML5input事件变得可用,并且是响应任何值更改的首选事件<input>。JsViews 的更高版本使用该input事件。

调用$('#title').val('Hello').change();会引发change事件,但不会引发input事件。

您可以input使用以下方法直接引发事件:

$('#title').val('Hello').trigger('input');

或者,您可以将触发器设置为false全局或本地。调用$('#title').val('Hello').change();将触发数据更新。(但是输入输入现在只会触发blur/上的数据更新change,而不是 上的keydown)。


查看完整回答
反对 回复 2023-04-27
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信