通过在 struts-dojo 自动完成上按 enter 键来防止表单提交

Posted

技术标签:

【中文标题】通过在 struts-dojo 自动完成上按 enter 键来防止表单提交【英文标题】:Prevent form submit by pressing enter key on struts-dojo autocomplete 【发布时间】:2013-05-15 09:30:23 【问题描述】:

我正在尝试更改 struts2-dojo 自动完成的输入事件,而不是提交表单,它应该做一些我的 jQuery 工作。

我试过了……

<s:form action="EmpAction">
    <sx:autocompleter label="Name" name="name" list="nameList" id="Name" showDownArrow="false" />
<s:textfield name="test" label="test" id="test"/>
</s:form>

在 jQuery 中...

<script type="text/javascript">
  $(function()
       $('#Name').key(function(e) 

        if (e.keyCode == 13) 
            e.preventDefault();
            alert($(this).val());
            //and some jQuery code to get JSON and fill test textfield.
        return false;
        
    );

); 
</script>

但是还是提交这个表单,我用过

e.preventDefault();

在很多情况下都取得了成功,但在这里它不起作用。

【问题讨论】:

【参考方案1】:

此代码将在您的上下文中工作

$(document).ready(function() 
  $(window).keydown(function(event)
    if(event.keyCode == 13) 
if(event.currentTarget != $("yourAutocompleteId"))
      event.preventDefault();
myPersonalFunctionCall();

else$("yourAutocompleteId").one("onfocus", false);

      return false;
    
  );
);

【讨论】:

嘿,抱歉,我在我的问题中遗漏了几行,我刚刚添加了它。缺少的部分是表单标记和自动完成 struts2-dojo 标记。我测试了您的代码及其工作,但在我的情况下,当我在 struts-dojo 自动完成标签中按 Enter 时,它不应该提交表单,而是应该按照我在 jquery 中指示的操作... 那还没有实现什么? Enter 键应该在自动完成 struts2-dojo 标签上工作,它不应该提交表单,而是至少应该显示警报“hi”消息,然后它不应该做任何事情。 我已经更新了我的答案。您必须检查输入事件是否从自动完成中触发。如果是,则什么也不做。否则你必须阻止默认功能。 它不再工作,表单正在提交。而你的第一个代码工作正常,它没有提交表单。这段代码if(event.currentTarget != $("yourAutocompleteId"))myPersonalFunctionCall();else$("yourAutocompleteId").one("onfocus",false;,您新添加的代码用于提交表单,我不知道为什么会这样。

以上是关于通过在 struts-dojo 自动完成上按 enter 键来防止表单提交的主要内容,如果未能解决你的问题,请参考以下文章

在科尔多瓦的键盘上按下“完成”按钮时调用一个函数[重复]

(Flutter) 如何在不按“完成”的情况下自动监听 TextField 中的变化?

通过 Intent 在 Spotify 上按“播放”

ios 5.1 中的自动刷新 uiviewcontroller

QML。无法通过在 android 上按外部来关闭菜单

如何通过在不同的视图控制器上按下按钮来更改 tableview 数据?