Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在动态创建的元素上触发按键事件_Jquery_Jquery Ui Autocomplete - Fatal编程技术网

Jquery 如何在动态创建的元素上触发按键事件

Jquery 如何在动态创建的元素上触发按键事件,jquery,jquery-ui-autocomplete,Jquery,Jquery Ui Autocomplete,我有一个firstName和一个lastName输入,我将其隐藏并替换为一个fullName输入框。然后,我在动态创建的输入上使用JqueryUI自动完成,效果很好。当我尝试为此编写单元测试并动态添加一些输入并触发“keydown”事件时,带有自动完成结果的框不会出现(我想断言我在测试中获得了所需的结果)。 如果我在输入中手动输入“s”,结果会显示得很好。 我有一个问题可以说明我的问题 HTML: JQuery: // add the single input $('#firstName')

我有一个firstName和一个lastName输入,我将其隐藏并替换为一个fullName输入框。然后,我在动态创建的输入上使用JqueryUI自动完成,效果很好。当我尝试为此编写单元测试并动态添加一些输入并触发“keydown”事件时,带有自动完成结果的框不会出现(我想断言我在测试中获得了所需的结果)。 如果我在输入中手动输入“s”,结果会显示得很好。 我有一个问题可以说明我的问题

HTML:


JQuery:

// add the single input
$('#firstName').before('<input id="fullName">');
// remove the original first and last name fields
$('#firstName, #lastName').hide();
// call autocomplete on the dynamically created input
$("#fullName").autocomplete({
  source: ["ActionScript", "AppleScript", "ASP", "Basic", "ColdFusion", "Haskell", "JavsScript", "Lisp", "Scala", "Scheme"]
});

// ** start unit test **

// auto populate the dynamic input
$('#fullName').val('sc');
// force a keypress to show the autocomplete options
$('#fullName').trigger('keypress');
//添加单个输入
$('#firstName')。在('')之前;
//删除原始的名字和姓氏字段
$('#firstName,#lastName').hide();
//对动态创建的输入调用autocomplete
$(“#全名”).autocomplete({
来源:[“ActionScript”、“AppleScript”、“ASP”、“Basic”、“ColdFusion”、“Haskell”、“Javscript”、“Lisp”、“Scala”、“Scheme”]
});
//**启动单元测试**
//自动填充动态输入
$('全名').val('sc');
//强制按键以显示自动完成选项
$(“#全名”).trigger('keypress');
更换

$('#fullName').trigger('keypress');

更新

OP不希望使用小部件的API,常见事件如
keydown
keypress
取决于
事件。调用
触发器时不存在的
keyCode

有趣的是,
input
事件不会抑制按键。因此,这可能是OP的单元测试的理想选择

$('#fullName').trigger('input')

这很好,但是有没有其他方法不调用autocomplete就可以实现这一点,这样我就可以在单元测试中使用它呢?您可以尝试
.trigger('input')
$('#fullName').autocomplete('search');
$('#fullName').trigger('input')