6

我将 select2 jquery 插件与 magnific popup 一起使用。如果我在打开的弹出窗口中单击选择,则会出现带有一些结果的搜索框。问题是无法在搜索框中输入任何内容 - 光标只是没有出现。这是演示问题的 jsfiddle http://jsfiddle.net/clime/qweWa/15/。代码如下:

# html
<a href="#test-popup" class="open-popup-link">Show inline popup</a>

<div id="test-popup" class="white-popup mfp-hide">
    <select id="focus-blur-loop-select">
        <option>hello</option>
        <option>world</option>
    </select>
</div>

# js
$(function() {
  $('.open-popup-link').magnificPopup({
    type:'inline',
    midClick: true
  });

  $('#focus-blur-loop-select').select2({
      width: '200px'
  });
});

# css
.white-popup {
  position: relative;
  background: #FFF;
  padding: 20px;
  width: auto;
  max-width: 500px;
  margin: 20px auto;
}

我已经做了一些基础研究,我发现下面的两个回调被无限调用。事件中似乎有一些无限循环。

// select2.js:742
search.on("focus", function () { search.addClass("select2-focused"); });
search.on("blur", function () { search.removeClass("select2-focused");});
4

2 回答 2

7

答案在这里:https ://github.com/dimsemenov/Magnific-Popup/issues/280 。该问题是由从弹出元素中渲染出来的 select2 输入引起的。它可以通过覆盖弹出窗口的 _onFocusIn 方法来修复:

$.magnificPopup.instance._onFocusIn = function(e) {
    // Do nothing if target element is select2 input
    if( $(e.target).hasClass('select2-input') ) {
       return true;
    } 
    // Else call parent method
    $.magnificPopup.proto._onFocusIn.call(this,e);
}
于 2013-11-15T11:34:17.493 回答
4

您应该在 magnificPopup 调用中使用“焦点”选项:

$('.open-popup-link').magnificPopup({
  type:'inline',
  focus: '#focus-blur-loop-select',
  midClick: true
});

magnificPopup 文档中,它的定义如下:

焦点(空字符串)

带有 CSS 选择器的字符串,其中包含应聚焦的弹出窗口中的元素。理想情况下,它应该是可以聚焦的弹出窗口的第一个元素。例如“输入”或“#login-input”。留空以聚焦弹出窗口本身。

于 2016-07-11T09:30:03.540 回答