0

输入自动完成,你按'enter'键,我会搜索一些东西。但是当你有自动完成并按'enter'时,我不想搜索,实际上当你按'enter'时它会搜索,因为它会捕获 enter 事件并执行搜索功能。

这是第一个功能:自动完成代码:

$('input[name=fieldInputName]').autocomplete(names, {
         max: max,    
         minChars: minChars ,   
         width: 149,     
         scrollHeight: 500,   
         matchContains: true,    
         autoFill: false, 
         sortable: true,
         matchSubset :false,
         formatItem: function(row, i, max) {
             return  row[returnSearchkey];
         },
         formatMatch: function(row, i, max) {
             return row[returnSearchkey] ;
         },
         formatResult: function(row) {
            return row[returnSearchkey];
         }
     }).result(function(event, row, formatted) {

     });

这是第二个功能:将进行搜索的 pressenter 代码:

function pressEnter(e){
        e = e || event;
        if (e.keyCode == 13) {
        submitSearch()();
        }
} 

输入的HTML:

 <input onkeyup="pressEnter(event);"type='text' name='createdBy' />

当您触发自动完成并通过按“输入”选择一项时,它将执行自动完成并填充所选值,但它也会调用第二个函数“pressEnter(e)”。实际上我想在按下回车时您触发了自动完成但没有执行第二个功能(按Enter)。

4

1 回答 1

0

DOM 中的事件从树中的某处开始,一直到元素(捕获阶段),然后它们冒泡到 DOM(冒泡阶段)。

您可以捕获事件并阻止它传播。它不会被进一步传播,也不会调用附加到例如包装元素的其他事件处理程序(如您的第二个函数)。

在自动完成的事件处理程序中,您应该调用stopPropagation()该事件。尽管这不适用于所有浏览器。在 IE9 之前的 IE 中调用该方法cancelBubble(true)

为了防止浏览器的默认行为,您可以这样做event.preventDefault()

您可以通过搜索“事件取消”或“事件传播”来了解更多信息,因为这是 JavaScript 中的一个棘手主题

于 2013-02-22T09:12:17.073 回答