简单 jQuery 工具提示(iPad 上的位置扭曲)
Simple jQuery Tooltip (position distorted on iPad)
我在我的网页 form-fields 上使用了简单的 jQuery UI 工具提示(即响应式),它在每个浏览器的桌面上都能完美运行,但在 iPad 当我点击 form-fields 作为键盘 swipe-up 时,它会变形。我网页的 header 部分也固定在滚动条上。
我在自定义 jQuery 工具提示中使用了以下代码。
$(function () {
$('.form-control').tooltip({
disabled: true,
position: {
my: "left top",
at: "left top-50",
using: function( position, feedback ) {
$( this ).css( position );
$( "<div>" )
.addClass( "arrow" )
.addClass( feedback.vertical )
.addClass( feedback.horizontal )
.appendTo( this );
}
}
}).on("focusin", function () {
$(this)
.tooltip("enable")
.tooltip("open");
}).on("focusout", function () {
$(this)
.tooltip("close")
.tooltip("disable");
});
});
我已将此代码写入 re-initialize 焦点字段的工具提示,方法是在文档大小更改时手动调用其 focusin
触发器。它在桌面浏览器上按预期工作,但在 iPad 工具提示上再次在同一位置 re-initialized 即不正确。
var toolTipEl;
$('#inputSuccess, #inputWarning').tooltip({
open: function (event, ui) {
toolTipEl = event.target;
}
});
function checkDocumentHeight(callback){
var lastHeight = document.body.clientHeight, newHeight, timer;
(function run(){
newHeight = document.body.clientHeight;
if( lastHeight != newHeight )
callback();
lastHeight = newHeight;
timer = setTimeout(run, 100);
})();
}
function doSomthing(){
console.log('document resized');
setTimeout(function() {
if ($(toolTipEl).is(':focus')) {
$(toolTipEl).trigger('focusout').trigger('focusin');
}
}, 500);
}
checkDocumentHeight(doSomthing);
请帮我找出解决方法。
在任何导致文档内容(实际上是高度)变化影响您的 Tooltip
位置的事件完成后,您需要重新初始化活动 Tooltip
。
首先通过在工具提示初始化中添加以下代码来监听其事件,从而保持对工具提示处于活动状态的元素的引用(保持现有代码不变。只需添加这些附加语句)。
var toolTipEl = undefined;
$(function () {
$('.form-control').tooltip({
open: function (event, ui) {
toolTipEl = event.target;
}
}).on("focusin", function () {
toolTipEl = undefined;
}).on("focusout", function () {
toolTipEl = undefined;
}).on("mouseleave", function () {
toolTipEl = undefined;
});
});
请注意,因为您也在 focusin
事件上显示工具提示。因此,如果您不想在焦点具有 changed/left.
时弹出工具提示,则还需要释放变量
然后创建一个 function
用于重置工具提示,如下所示。
function resetTooltip() {
if (toolTipEl) {
$(toolTipEl).trigger('focusout').trigger('focusin');
};
}
在任何导致文档高度变化的事件中调用此 function
。例如,如果内容来自 ajax
请求。您可以通过列出 gloab ajax 事件来调用 restTooltip
函数。请参阅下面的示例。
$( document ).ajaxComplete(function() {
resetTooltip();
});
希望对您有所帮助。问我是否需要进一步说明。
我在我的网页 form-fields 上使用了简单的 jQuery UI 工具提示(即响应式),它在每个浏览器的桌面上都能完美运行,但在 iPad 当我点击 form-fields 作为键盘 swipe-up 时,它会变形。我网页的 header 部分也固定在滚动条上。 我在自定义 jQuery 工具提示中使用了以下代码。
$(function () {
$('.form-control').tooltip({
disabled: true,
position: {
my: "left top",
at: "left top-50",
using: function( position, feedback ) {
$( this ).css( position );
$( "<div>" )
.addClass( "arrow" )
.addClass( feedback.vertical )
.addClass( feedback.horizontal )
.appendTo( this );
}
}
}).on("focusin", function () {
$(this)
.tooltip("enable")
.tooltip("open");
}).on("focusout", function () {
$(this)
.tooltip("close")
.tooltip("disable");
});
});
我已将此代码写入 re-initialize 焦点字段的工具提示,方法是在文档大小更改时手动调用其 focusin
触发器。它在桌面浏览器上按预期工作,但在 iPad 工具提示上再次在同一位置 re-initialized 即不正确。
var toolTipEl;
$('#inputSuccess, #inputWarning').tooltip({
open: function (event, ui) {
toolTipEl = event.target;
}
});
function checkDocumentHeight(callback){
var lastHeight = document.body.clientHeight, newHeight, timer;
(function run(){
newHeight = document.body.clientHeight;
if( lastHeight != newHeight )
callback();
lastHeight = newHeight;
timer = setTimeout(run, 100);
})();
}
function doSomthing(){
console.log('document resized');
setTimeout(function() {
if ($(toolTipEl).is(':focus')) {
$(toolTipEl).trigger('focusout').trigger('focusin');
}
}, 500);
}
checkDocumentHeight(doSomthing);
请帮我找出解决方法。
在任何导致文档内容(实际上是高度)变化影响您的 Tooltip
位置的事件完成后,您需要重新初始化活动 Tooltip
。
首先通过在工具提示初始化中添加以下代码来监听其事件,从而保持对工具提示处于活动状态的元素的引用(保持现有代码不变。只需添加这些附加语句)。
var toolTipEl = undefined;
$(function () {
$('.form-control').tooltip({
open: function (event, ui) {
toolTipEl = event.target;
}
}).on("focusin", function () {
toolTipEl = undefined;
}).on("focusout", function () {
toolTipEl = undefined;
}).on("mouseleave", function () {
toolTipEl = undefined;
});
});
请注意,因为您也在 focusin
事件上显示工具提示。因此,如果您不想在焦点具有 changed/left.
然后创建一个 function
用于重置工具提示,如下所示。
function resetTooltip() {
if (toolTipEl) {
$(toolTipEl).trigger('focusout').trigger('focusin');
};
}
在任何导致文档高度变化的事件中调用此 function
。例如,如果内容来自 ajax
请求。您可以通过列出 gloab ajax 事件来调用 restTooltip
函数。请参阅下面的示例。
$( document ).ajaxComplete(function() {
resetTooltip();
});
希望对您有所帮助。问我是否需要进一步说明。