【问题标题】:Bootstrap Select collides with JQuery virtual keyboardBootstrap Select 与 JQuery 虚拟键盘冲突
【发布时间】:2018-02-08 17:53:43
【问题描述】:

这是一个很好的。基本上,我特别使用两个库来获得我想要的东西。引导选择:

https://silviomoreto.github.io/bootstrap-select/

和 JQuery 虚拟键盘:

https://mottie.github.io/Keyboard/

(添加链接以防有人发现它们对自己的东西有用)

我使用引导选择是因为作为选择组显示的查询数据非常大,因此在其中添加一个输入字段实用程序以使我们的用户更简单是有意义的。我们还需要一个虚拟键盘,这正是我们添加 jquery 插件的原因。问题是当我们触摸选择输入并且键盘出来时,我们输入的任何内容都不会被过滤。也没有添加,到目前为止,键盘似乎只适用于常规输入文本字段

在最简单的形式中,这是我用来生成键盘以及初始化选择选择器的代码:

let virtualK = ()=> {
    $('.buscame')
          .keyboard({
            layout: 'qwerty',
            position: {
              of : $(window),
              my : 'center bottom',
              at : 'center bottom',
              at2: 'center bottom'  
            }
          })
          .addTyping();
  }
  $(document).ready(function(){
    $('#example').selectpicker({});
    $('#Transfer').selectpicker({});
    $('#Chofer').selectpicker({});
    $('#Transportista').selectpicker({});
    $('#localidad').selectpicker({});
    $('#Cliente').selectpicker({});

    // Initialize the keyboard
    virtualK();
  });

至于选择标签,代码如下:

<select name="Transfer" size="1" id="Transfer" class="form-control select-picker buscame" data-live-search="true" required onChange="javascript:OnChangeOperador()">

我面临的另一个问题是,如果我尝试通过传递 .buscame 作为标识符来运行 JS 代码,那么键盘不会显示,而如果我选择通用标识符为 input 它可以工作。 bootstrap select 的文档没有显示为其自动生成的输入框添加 id 的任何方法,因此这似乎不是一个选项(如果有人知道,请告诉)

那么,有没有人知道让虚拟键盘在自定义选择的内部搜索框上工作的方法?或者如何在生成的输入过滤字段中添加一个id?

编辑:

我尝试过使用

let virtualK = ()=> {
    $('input[role="textbox"]')
          .keyboard({
            layout: 'qwerty',
            position: {
              of : $(window),
              my : 'center bottom',
              at : 'center bottom',
              at2: 'center bottom'  
            }
          })
          .addTyping();
  }

但它的作用相同,虚拟键盘会打开,但我输入的任何内容都不会被过滤。

花了我一段时间,因为 jsfiddle 和 jsbin 很有趣,但这里是这个问题的娱乐:

https://codepen.io/AlecX4/pen/vJvmLb?editors=0000

【问题讨论】:

  • 添加一个 jsfiddle/sn-p 作为工作示例
  • @Dekel 当然,让我写完
  • @Dekel 添加了它!抱歉拖了这么久,赶上了。

标签: javascript jquery twitter-bootstrap keyboard


【解决方案1】:

您需要设置相关输入的值并触发该输入的propertychange,以告知bootstrap-select输入的值已更改。

change: function(e, keyboard) {
    keyboard.$el.val(keyboard.$preview.val())
    keyboard.$el.trigger('propertychange')        
  }

以下是您的 codepen 的更新:
https://codepen.io/anon/pen/EvGpvz

【讨论】:

  • 谢谢德克尔,工作就像一个魅力。我正在阅读有关更改功能及其工作原理的文档,但我无法看到您如何与此建立联系。我想我会一直盯着定义,直到它有意义为止。到那时,感谢您的时间和帮助。
  • 让我知道您不理解代码的哪一部分/哪一部分 :)
  • 例如,change 的文档指出,无论 usePreview 选项的设置如何,每次键盘交互都会调用 change 回调。 usePreview (对于我可以收集的内容)根据打开的输入字段(正确?)而改变 keyboard.$el 指的是键盘输入 jquery 对象,因此当您将 val 设置为 keyboard.$preview.val() 时将值更改为焦点输入?我有点得到代码,如果有的话,我很惊讶你是如何找到你需要的东西来帮助我这么快解决这个问题的!
  • keyboard.$preview.val()preview 输入中获取值(与焦点无关),keyboard.$el.val(... 会将值设置为原始输入(因为否则它只会在您设置单击“接受”按钮。我找不到为每个键设置它的方法)。希望这个评论说清楚:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 2013-03-15
  • 2017-07-27
  • 2014-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多