当用户按Enter键时,在Ember刷新页面上输入

时间:2014-09-27 03:22:46

标签: ember.js

我正在使用Ember CLI并注意到奇怪的行为。当用户点击输入并按下回车键时,页面会刷新。

我的页面有一个这样的基本元素,不属于任何形式:

<input type="text" class="form-control" id="per_page" value="50">

我目前正在通过以下网页提供服务:

ember cli

所以节点正在托管,并且正在进行花哨的实时重装,以便在我更新作为底层应用程序一部分的页面时。

那么是什么导致页面重新加载输入中按下的回车键?它可能是节点还是实时重载?当用户按下回车键时输入只是刷新页面而我错过了我的HTML for dummies book?

**更好的是,我如何拦截并通过以下方式调用函数:

{{action** "myFunction"}}

3 个答案:

答案 0 :(得分:6)

发生这种情况是因为当您按Enter键时,表单会被提交,从而导致页面重新加载。您需要做的是在表单上设置onsubmit="return false",以便在提交期间不会发生任何事情。您可以通过添加操作属性action="doSomething"

来绑定输入以执行某些操作
<form onsubmit="return false">
        {{input type="text" action="createComment" value=topic id="inputTopic"}}
</form>

答案 1 :(得分:2)

历史上,Ember使用以下代码处理了此用例:

<form {{action 'submitForm' on='submit'}}>
  <!-- the rest of your form here -->

  <button type='submit'>Submit</button>
</form>

这可以防止表单刷新页面。

还有另一种方法可以为您提供更多控制权,方法是为您提供事件,以便您自己管理:

<form onsubmit={{action 'submitForm'}}>
  <!-- the rest of your form here -->

  <button type='submit'>Submit</button>
</form>

在这种情况下,您将收到一个活动,并且必须致电event.preventDefault()以停止刷新页面。

actions: {
  submitForm(event) {
    event.preventDefault();
  }
}

这是两个运行的例子:https://ember-twiddle.com/827820958e054f7af57b7677630729fc?openFiles=controllers.application.js%2C

答案 2 :(得分:0)

我遇到了同样的问题 - 对我有用的是在输入组件中覆盖keyPress事件,如下所示:

keyPress: function (e) {
    var keyCodeEnter = 13;

    if (e.keyCode === keyCodeEnter) {
        return false;
    }
}

希望将来有人会帮助你! :)