我修改了bootstrap的popover函数,以包含一个非常好的回调函数。但是在回调中,我无法以编程方式关注第一个表单字段。奇怪,因为我可以操纵回调函数中的其他元素以及关注其他点上的元素。
以下是我从另一个SO问题(https://stackoverflow.com/a/14727204/1596547)添加回调的代码:
var tmp = $.fn.popover.Constructor.prototype.show;
$.fn.popover.Constructor.prototype.show = function () {
tmp.call(this);
if (this.options.callback) {
this.options.callback();
}
}
这是popover代码:
$('#a-editor-btn').popover({
html: true,
placement: 'bottom',
callback: function(){
$('#a-form-point').focus(); //nothing happens
console.log('hello'); // works
.
.
},
content: $('#a-form').html()
}).parent().delegate('button#insert-point-btn', 'click', function() {
insertPoint();
}).delegate('.a-form','keypress', function(e) {
if ( e.which == 13 ) {
insertPoint();
}
});
答案 0 :(得分:1)
您的按钮点击似乎提交表单。提交后你的焦点就丢失了。
通过在.click(function(){return false;});
之后添加.popover()
来阻止提交。
$('#a-editor-btn').popover({
html: true,
placement: 'bottom',
callback: function(){
//e.stopPropagation();
thisfocus(); //nothing happens
console.log('hello'); // works
},
content: $('#a-form').html()
}).parent().delegate('button#insert-point-btn', 'click', function() {
insertPoint();
}).delegate('.a-form','keypress', function(e) {
if ( e.which == 13 ) {
insertPoint();
}
}).click(function(){return false;});
现在你的popover不会再消失了。快速修复:使用超时调用hide():
var tmp = $.fn.popover.Constructor.prototype.show;
var tmp2 = $.fn.popover.Constructor.prototype.hide;
$.fn.popover.Constructor.prototype.show = function () {
tmp.call(this);
if (this.options.callback) {
this.options.callback();
}
var that = this;
setTimeout(function(){tmp2.call(that)},500);
}