3

我有一个带有表单和两个输入字段的引导模式,它们使用引导的预输入。两者都在工作,但第二个的结果没有正确显示,如下所示:

在此处输入图像描述

有人可以帮我解决这个问题吗?

编辑

查询:

$(function(){

    var stopObjs = {};
    var stopNamen = [];

    $(".naamtypeahead").typeahead({
        source: function ( query, process ) {

            $.ajax({
                url: '../includes/js/autocompletenaam.php',
                type: 'GET',
                dataType: 'json',
                data: 'naam=' + query
                ,cache: false
                ,success: function(data){

                    stopObjs = {
                    };
                    stopNamen = [];

                    _.each( data, function(item, ix, list){

                        stopNamen.push( item.naam )

                        stopObjs[ item.naam ] = item.adres;
                    });

                        process( stopNamen );
                }
            });
        }
        , updater: function ( adres) {

            $( ".adres" ).val( stopObjs[ adres ] );

            return adres;
        }
    });
});
4

2 回答 2

2

我发现了同样的问题(看起来像是某种错误,请参阅:https ://github.com/twitter/bootstrap/pull/8436以获得可能的修复)。带有选项的菜单获得一个带有绝对位置的 CSS 顶部。在模态中使用预输入时,滚动高度不用于计算顶部。此问题已在以下位置修复:https ://github.com/bassjobsen/Bootstrap-3-Typeahead

模式的滚动导致问题不是使用多个字段(提前输入)。

我找到的最佳解决方案(更新!)

function scrollHeight()
{
  return $('.modal-body').scrollTop();
} 

$.fn.typeahead.Constructor.prototype.show = function () {
      var pos = $.extend({}, this.$element.position(), {
        height: this.$element[0].offsetHeight
      })

      this.$menu
        .insertAfter(this.$element)
        .css({
          top: (pos.top + pos.height + scrollHeight.call())
        , left: pos.left
        })
        .show()

      this.shown = true
      return this

    }

这将覆盖 typeahead 类的 show 函数并添加+ $('.modal-body').scrollTop()到它。并添加对 scrollHeight 的调用以设置动态高度。

另请参阅更新http ://bootply.com/66845 (删除 javascript 以查看问题)

8月20日更新

上面的代码只适用于一种模式(只有一个 .modal-body 类)。对于两个或多个模态,请使用以下代码:

$.fn.typeahead.Constructor.prototype.show = function () {
      var pos = $.extend({}, this.$element.position(), {
        height: this.$element[0].offsetHeight
      })                    
      this.$menu
        .insertAfter(this.$element)
        .css({
          top: (pos.top + pos.height + this.$element.closest('.modal-body').scrollTop())
        , left: pos.left
        })
        .show()

      this.shown = true
      return this

}

Twitter 的 Typeahead 和 Twitter 的 Bootstrap 3

Twitter 的 Bootstrap 3 删除了 bootstrap-typeahead.js 并告诉使用 Twitter 的 Typeahead ( http://twitter.github.io/typeahead.js/ )。另见:https ://github.com/twitter/bootstrap/issues/7805 。切换到 Twitter 的 Typeahead(使用 Twitter 的 Bootstrap 2.x)似乎也可以解决您的问题。但是...... 要将 Twitter 的 Typeahead 与 Bootstrap 一起使用,您需要添加一些额外的样式表:https ://github.com/twitter/typeahead.js#bootstrap-integration 。在具有多个(预先输入)表单字段的模式中使用它时,表单字段将位于下拉菜单上方。要解决此问题,请在样式表中添加 z-index:1:

.twitter-typeahead .tt-query,
.twitter-typeahead .tt-hint {
  margin-bottom: 0;
   z-index: 1;
}

另见:https ://github.com/jharding/typeahead.js-bootstrap.css/pull/13

Twitter 的引导程序 3

Twitter 的 Bootstrap 3 的 Typeahead 的 Bootstrap 集成目前无法正常工作(2013 年 7 月 10 日)

于 2013-07-09T23:27:48.840 回答
1

我也发现了这个问题。我使用此代码是正确的:-

顶部:(pos.top + pos.height + this.$element.offsetParent().scrollTop())

所以这应该纠正所有滚动div上的位置,其中typeAhead在其中。

于 2013-09-21T05:26:50.147 回答