我使用select2 jquery插件和magnific弹出窗口。如果我在打开的弹出窗口中单击选择,则会显示包含某些结果的搜索框。问题是无法在搜索框中输入任何内容 - 光标就不会出现。这是演示问题http://jsfiddle.net/clime/qweWa/15/的jsfiddle。代码如下:
# 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;
}
我已经完成了一些基础研究,并且我发现下面的两个回调被称为unfinetly。事件似乎有一些无限循环。
// select2.js:742
search.on("focus", function () { search.addClass("select2-focused"); });
search.on("blur", function () { search.removeClass("select2-focused");});
答案 0 :(得分:6)
答案在这里:https://github.com/dimsemenov/Magnific-Popup/issues/280。问题是由弹出元素渲染的select2输入引起的。它可以通过重写弹出窗口onFocus方法来修复:
$.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);
}
答案 1 :(得分:3)
你应该在magnificPopup调用中使用'focus'选项:
$('.open-popup-link').magnificPopup({
type:'inline',
focus: '#focus-blur-loop-select',
midClick: true
});
在magnificPopup documentation中,它的定义如下:
焦点 (空字符串)
具有应该聚焦的弹出窗口内元素的CSS选择器的字符串。理想情况下,它应该是可以聚焦的弹出窗口的第一个元素。例如'input'或'#login-input'。留空以关注弹出窗口。