“Keypress"事件不能正常工作,使用jQuery &Select2

"Keypress" event is not working correctly, using jQuery & Select2

本文关键字:工作 使用 Select2 jQuery 常工作 quot Keypress 事件 不能      更新时间:2023-09-26

我有一个论坛,我改变选项卡的功能进入。当用户按enter下一个输入字段获得焦点,并以某种方式在focusin事件上打开select2选择框,因此select2框打开。

但是,当我选择值并在selec2选择框中按enter键时,它不会关闭并在输入键按事件时保持打开状态,但它关闭了。当我将enter键事件更改为任何按键事件,而不是select2接近并工作良好,但我必须通过enter来完成。

我想要的:
当用户在select2搜索框中选择值并按回车键时,它会靠近并将焦点移到下一个输入字段或任何字段。

我到目前为止所做的。

$('.search-select').on("focusin",function(event) {
    $('#s2id_form-field-select-3').select2('open');
    event.preventDefault();  
});

$('.select2-input').on("keypress", function(e) {
            if (e.keyCode == 13) {
                $("#select2-drop-mask").click();
                $('#name').focus();
                e.preventDefault();   
                }
       });

选择任意正在工作的按键事件

$('.select2-input').on("keypress", function(event) {
                $("#select2-drop-mask").click();
                $('#name').focus();
                event.preventDefault();         
});

标记

 <select id="form-field-select-3" name="register_id" class="form-control search-select" required="required">
   <option value="">&nbsp;</option>
   <? $query=$this->dba->get_dropdown('register',array('id','name'));
      foreach($query as $key=>$value):
   ?>
   <option value="<?=$key?>"><?=$value; ?></option>}
  <? endforeach;?>
</select>

为错误提前道歉,这是我第一次使用Select2

我想你在找keydown:

$('.select2-input').on("keydown", function(e) {
            if (e.keyCode == 13) {
                $("#select2-drop-mask").click();
                $('#name').focus();
                e.preventDefault();   
                }
       });

他们有一点不同。在这种情况下,keypress没有在字段中插入任何内容。

For me worked

$(document).on('keyup keydown', 'input.select2-search__field', function(e) {   

你不能使用jQuery附加一个keydown或keypress事件处理程序来从Select2;捕获这些事件。因此,您需要安装一个keydown事件处理程序,以便在Select2处理事件之前捕获事件。你可以用document.addEventListener('keydown', handler, true);来做。第三个参数告诉浏览器让你的处理程序先处理keydown事件。

的例子:

function myhandler(event){
if (event.keyCode == 117) {
event.preventDefault();
event.stopPropagation();
// do what you want when user press F6 on keyboard;
        return false;
    }
}
document.addEventListener('keydown', myhandler, true);