У меня есть следующий яваскрипта код:Javascript не обновляет атрибут CSS на модального всплывающего окна
<script type="text/javascript">
function doPopup(file){
var dlg=$('#popup').dialog({
resizable: false,
autoOpen: false,
modal: true,
hide: 'fade',
position: ['center', 'center']
});
dlg.load(file, function(){
dlg.dialog('open');
});
var maskHeight = $(document).height();
var maskWidth = $(window).width();
$('#mask').css({'width':maskWidth, 'height':maskHeight});
$('#mask').fadeTo("slow", 0.85);
dlg.parent().css('z-index', 9001);
dlg.parent().css('position', 'absolute');
//alert('I'm an alert');
if(file.indexOf("CustomerCouponDisplay.asp" !== -1)) {
var imgWidth = $('#couponImg').width();
var winW = $(window).width();
dlg.parent().css('left', (winW - imgWidth)/2);
}
}
</script>
По существу, когда эта функция вызывается, она принимает имя файла веб-страницы и отображает содержимое в модальном выскакивать.
Когда код запускается как есть, общее ожидаемое поведение происходит в соответствии с планом: маска div захватывает экран, исчезает до темноты, и появляется всплывающее окно.
Проблема: Наше изображение купона слишком велико для всплывающего div, поэтому у меня есть оператор if, который автоматически перекроет всплывающее окно на экране. Однако это повторное центрирование никогда не происходит, несмотря на то, что этот код выполняется.
Веселая часть: Если я раскомментирую это предупреждение, изображение все еще отображается вне центра. После нажатия кнопки «ОК», чтобы закрыть оповещение, экран перерисовывается, и изображение теперь центрируется по желанию.
Я пробовал несколько вещей, включая различные способы доступа к родительскому элементу всплывающего окна, различные способы предоставления аргументов css()
, поместив строку popup.parent.css в несколько разных мест, hardcoding «left» ', открывая диалог только после того, как все будет загружено и обновлено css (этот сломал все) и несколько других вещей, которые также не работали.
Моя текущая мысль: я видел в одном не очень-то, что связано с тем, что некоторые из стилей CSS не обновлялись, потому что «анимация слишком длилась» (или что-то в этом роде). Я, конечно, делаю html rewrite с диалогом и затуханием маски, так что это может быть связано с атрибутом «left», который не захватывает?
Отказ от моей нынешней мысли: я чувствую, что это не так, потому что ПРАВИЛЬНО ПЕРЕД Я пытаюсь установить атрибут «left», я успешно устанавливаю другие атрибуты для одного и того же компонента, и они вступают в силу без проблем , В случае, если это была линия fadeTo, я даже переместил ее внизу. То же самое произошло: не было сосредоточено до тех пор, пока предупреждение не было закрыто.
Мысли?
Редактировать: как раз это важно, это выполняется на странице ASP. Это не. NET.
Вы пробовали положить остальную часть кода в '.load()' 'обратного вызова с dlg.dialog ('открытый');'? Когда «сломанный» код «фиксируется» предупреждением, он может указывать на проблему с асинхронным кодом ... – nnnnnn
У меня нет, и я попытаюсь сделать это немедленно. Изменить: поместить код до 'dlg.dialog ('open');' ничего не делает, чего я ожидал. поместив его ПОСЛЕ того, что линия приводит к тому, что маска будет исчезать до темноты, но всплывающее окно вообще не появляется. Firebug не сообщает о проблемах. –
@nnnnnn любые мысли? Мои навыки javascript ужасны; Я только начал работать с ним около месяца назад, поэтому я не знаю ни одной из особенностей, которые он имеет (например, асинхронное выполнение). –