在输入文本上触发jQuery的keypress事件

时间:2012-05-21 12:45:00

标签: triggers jquery keydown which

关于.trigger() methodEvent objectwhich propertyJS char codes以及下面的代码,为什么#example输入无法获得char a自动编写的值?我误解了.trigger()方法吗?

<input type="text" name="example" id="example" value="" />

<script>
$(function() {
    var e = jQuery.Event("keydown", { which: 65 });
    $("#example").focus().trigger(e);
});
</script>

3 个答案:

答案 0 :(得分:5)

您所犯的错误就是您期望使用jQuery的trigger方法。如果您查看code,您将看到它正在执行的是实际执行jQuery注册的事件处理程序而不是 DOM Level 3事件。因为它只执行jQuery处理程序,所以你不会导致change事件,这是你需要触发来更新文本框的value属性。

答案 1 :(得分:0)

根据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');

答案 2 :(得分:0)

可能过度简化了事情,但是你不能简单地改变输入字段的.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 interval变量将遍历autoText数组的所有索引,并且对于每次迭代,它将在输入字段中附加一个字符。

这会给你更多的自动输入感觉......

here is a working jsFiddle example