Ответ 1
Я обнаружил, что объявление bootstrap.js перед jquery-ui.js в моем вызвало проблему. Перед загрузкой bootstrap.js убедитесь, что jquery-ui.js.
Я использую всплывающую подсказку jQuery для динамически созданной строки (может быть длиной 10 строк и более)
Подсказка отображается правильно, но закрытие не выполняется должным образом.
Ошибка приведена ниже,
Error: cannot call methods on tooltip prior to initialization; attempted to call method 'close'
throw new Error( msg );
while(m < 10){
.......................................
.......................................
if(data =="EXIST")
{
display_tp_tooltip(m);
$("#tp_no"+m).val("");
}
else
{
display_tp_tooltip_close(m);
}
}
function display_tp_tooltip(m)
{
$("#tp_no"+m).tooltip();
$("#tp_no"+m).tooltip({
open: function (e, o) {
o.tooltip.animate({ top: o.tooltip.position().top + 10 }, "fast" );
$(o.tooltip).mouseover(function (e) {
$("#tp_no"+m).tooltip('close');
});
$(o.tooltip).mouseout(function (e) {});
},
position: {
my: "center bottom-20",
at: "center top",
using: function( position, feedback ) {
$( this ).css( position );
$( "<div>" )
.addClass( "arrow" )
.addClass( feedback.vertical )
.addClass( feedback.horizontal )
.append($('<style>.ui-tooltip,.arrow:after { background:red; }</style>'))
.appendTo( this );
}
},
content: function() { return cellTpNoTooltipContent()},
close: function (e, o) {},
show: {
duration: 800
}
});
$("#tp_no"+m).tooltip('open');
setTimeout(function () {
$(this).tooltip('close'); //close the tooltip
}, 3000);
}
function cellTpNoTooltipContent()
{
var rval = "T.P No. is exist";
return rval;
}
function display_tp_tooltip_close(m)
{
$("#tp_no"+m).tooltip("close");
}
Как я могу это решить? Пожалуйста, помогите мне.
Я обнаружил, что объявление bootstrap.js перед jquery-ui.js в моем вызвало проблему. Перед загрузкой bootstrap.js убедитесь, что jquery-ui.js.
Объявите jquery-ui.js перед загрузкой bootstrap.js
Я всегда проверяю, существуют ли элементы до вызова методов close и т.д.
Если ($ (myelem).length > -1) что-то делать
Вы не можете вызывать метод из виджета всплывающей подсказки (например, .tooltip('close')
) до того, как виджет был инициализирован, либо с вызовом .tooltip()
, либо .tooltip({ })
Вы можете предотвратить эту ошибку, проверив, что элемент DOM является экземпляром виджета всплывающей подсказки:
if($("#tp_no"+m).is(':ui-tooltip')){
$("#tp_no"+m).tooltip("close");
}
Другим вариантом было бы перевести вызов на $("#tp_no"+m).tooltip();
в первую очередь внутри цикла while(m < 10)
, чтобы убедиться, что какая ветвь принимает ваш оператор if, элемент будет экземпляром виджета всплывающей подсказки
Объявление jquery-ui.js до bootstrap.js также решило мою проблему
Ошибка типа: elem.getClientRects не является функцией в jQuery.fn.init.offset
Вам нужно будет запретить библиотеке jQuery UI перезаписывать jQuery.fn.tooltip
.
Поэтому кэшируйте это значение перед загрузкой библиотеки пользовательского интерфейса jQuery, а затем восстановите его:
<script>
let _tooltip = jQuery.fn.tooltip; // <--- Cache this
</script>
<script src="/path/to/jquery-ui.min.js"></script> <!-- load jQuery UI -->
<script>
jQuery.fn.tooltip = _tooltip; // <--- Then restore it here
</script>