Dojo - 按Enter键提交表单

时间:2010-10-11 18:09:33

标签: javascript dojo

我有以下代码:

<div dojoType="dijit.layout.ContentPane" id="filterForm" style="padding: 3px">
    <form dojoType="dijit.form.Form">
        <input dojoType="dijit.form.TextBox" style="width: 120px" />
        <button dojoType="dijit.form.Button" type="submit">
            Filter
        </button>
        <script type="dojo/connect" event="onSubmit" args="evt">
            filterGrid();
            dojo.stopEvent(evt);
        </script>
    </form>
</div>

如果单击“过滤器”按钮,它会按预期工作,但是当用户按Enter键时,我希望使用相同的行为,同时关注文本框。但这不会发生。事实上,按Enter键时没有任何反应。如何在按Enter键时执行onSubmit处理程序?感谢。

3 个答案:

答案 0 :(得分:4)

Dario这应该有效。你环境中的其他东西搞砸了。您可能有另一个脚本拦截击键。这可以在您网页上的脚本中,甚至可以在您的浏览器环境中,例如油脂猴子脚本或其他扩展名。

您应该设置一个最小的测试用例,其中网页仅包含一些包含该表单的极小html,并从aol或google CDN加载dojo并尝试输入。如果它不起作用,请给我们一份完整的测试副本(或URL),我们会试着看看出了什么问题,但我怀疑它会起作用。然后,您需要在最小测试用例和完整站点环境之间向后工作,直到找到相互冲突的脚本。

答案 1 :(得分:0)

这是我为我编写和工作的解决方案。 在&#34; dijit / form / ValidationTextBox&#34;上提交回车键。使用摩卡测试

keyEventDispatch:function(element,code,completionFn){

        var keyboardEvent = document.createEvent("KeyboardEvent");

          Object.defineProperty(keyboardEvent, 'keyCode', {
            get : function() {
              return this.keyCodeVal;
            }
          });
          Object.defineProperty(keyboardEvent, 'which', {
            get : function() {
              return this.keyCodeVal;
            }
          });
          var initMethod = typeof keyboardEvent.initKeyboardEvent !== 'undefined' ? "initKeyboardEvent" : "initKeyEvent";
          keyboardEvent[initMethod](
             "keypress", // event type : keydown, keyup, keypress
             true, // bubbles
             true, // cancelable
             window, // viewArg: should be window
             false, // ctrlKeyArg
             false, // altKeyArg
             false, // shiftKeyArg
             false, // metaKeyArg
             code, // keyCodeArg : unsigned long the virtual key code, else 0
             0 // charCodeArgs : unsigned long the Unicode character associated with the depressed key, else 0
          );
          keyboardEvent.keyCodeVal = code;
          if (element.dispatchEvent) element.dispatchEvent(keyboardEvent);  
          if (completionFn) completionFn();
    },

在你的考试中你会打电话 keyEventDispatch(textboxes,13);

希望有所帮助

答案 2 :(得分:0)

我遇到了同样的问题,即在使用Dojo 1.5.0的旧代码库中,这不适用于Internet Explorer(适用于Firefox,Chrome适用)。

在隐藏表单的IE问题中,在Dojo中被证明是a bug,并由this patch修复。