【问题标题】:Trigger the jQuery's keypress event on an input text在输入文本上触发 jQuery 的按键事件
【发布时间】:2012-05-21 12:44:59
【问题描述】:
关于.trigger() method、Event object、which property、JS char codes和下面的代码,为什么#example输入没有得到字符a作为auto-写的价值?我是不是误解了.trigger()这个方法?
<input type="text" name="example" id="example" value="" />
<script>
$(function() {
var e = jQuery.Event("keydown", { which: 65 });
$("#example").focus().trigger(e);
});
</script>
【问题讨论】:
标签:
jquery
triggers
keydown
【解决方案1】:
您所犯的错误是您期望 jQuery 的 trigger 方法执行的操作。如果您查看code,您会发现它实际上是在执行jQuery 注册的事件处理程序而不是 DOM Level 3 事件。因为它只执行 jQuery 处理程序,所以您不会导致 change 事件,这是您需要被触发来更新文本框的 value 属性。
【解决方案2】:
根据documentation
当相应的事件发生时,任何附加了 .bind() 或其快捷方法的事件处理程序都会被触发。
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
在你的情况下,它会是:
$('#example').bind('keydown', function(e) {
alert("Pressed: " + e.keycode());
});
$('#example').focus().trigger('click');
【解决方案3】:
可能过于简化了,但您不能简单地更改输入字段的.val()(值)来模拟auto-written values吗?
您可以像这样简单地设置值 -
$("#example").val('Some auto-written value');
你可以做一些像这样更直观的事情 -
var autoText = ['f','o','o','b','a','r'];
var characterIndex = 0;
var autoType = setInterval(function(){
$("#example").val( $("#example").val() + autoText[characterIndex] );
characterIndex++;
if (characterIndex >= autoText.length){
clearInterval(autoType);
}
},_keystroke_interval);
_keystroke_interval 是自动输入字符之间的间隔(以毫秒为单位)。 autoType 区间变量将遍历 autoText 数组的所有索引,并且对于每次迭代,它将在输入字段中附加一个字符。
这会给你更多的自动输入感觉...
here is a working jsFiddle example