#javascript #iframe
Вопрос:
У меня есть iframe и пара таблиц на моей странице aspx. Теперь, когда страница загружается, эти таблицы скрыты. Iframe используется для загрузки файла в базу данных. В зависимости от результата события я должен показать определенную таблицу на своей главной странице (в этих таблицах в основном есть кнопки «Повторить»,»далее»…в зависимости от того, загружен файл или нет, я должен показать соответствующую кнопку).
Теперь у меня есть JavaScript для события «onload» iframe, в котором я скрываю эти таблицы для начала. Когда элемент управления возвращается после события, я показываю определенную таблицу. Но затем iframe загружается снова, и таблицы скрыты. Может ли кто — нибудь помочь мне с этой проблемой. Я не хочу, чтобы iframe загружался во второй раз.
Спасибо
Ответ №1:
ммм, вы сказали, что находитесь на странице aspx, я полагаю, что iframe выполняет обратную передачу, поэтому для этого он перезагружает страницу. Если вы не можете избежать обратной отправки, вам необходимо установить флажок на главной странице непосредственно перед отправкой обратной отправки и проверить его во время загрузки…
…что-то вроде:
mainpage.waitTillPostBack = true
YourFunctionCausingPostBack();
..
onload=function(){
if(!mainpage.waitTillPostBack){
hideTables();
}
mainpage.waitTillPostBack = false;
}
Ответ №2:
Я не уверен, в чем ваша проблема, но, возможно, ваш подход должен быть немного другим. Попробуйте ввести в iframe код, который вызывал бы функции родителя. Эти функции отображали бы соответствующую таблицу:
<!-- in the main page --->
function showTable1() {}
<!-- in the iframe -->
window.onload = function () {
parent.showTable1();
}
Это позволило бы значительно контролировать ваш iframe вдали от главной страницы.
Ответ №3:
У меня недостаточно подробностей из вашего вопроса, чтобы определить, можно ли предотвратить вторую загрузку iframe. Но я бы предложил использовать переменную javascript, чтобы проверить, загружается ли iframe во второй раз, и в этом случае пропустить логику скрытия таблиц,
Ответ №4:
Это мой код
функция initUpload() { //предупреждение(«Загрузка IFrame»); _divFrame = document.getElementById(‘divFrame’); _divUploadMessage = document.getElementById(‘divUploadMessage’); _divUploadProgress = document.getElementById(‘divUploadProgress’); _ifrFile = document.getElementById(‘ifrFile’); _tretry = документ.getElementById(‘tbRetry’); _tbNext=документ.getElementById(‘tblNext’);
_tbRetry.style.display='none';
_tbNext.style.display='none';
var btnUpload = _ifrFile.contentWindow.document.getElementById('btnUpload');
btnUpload.onclick = function(event)
{
var myFile = _ifrFile.contentWindow.document.getElementById('myFile');
//Baisic validation
_divUploadMessage.style.display = 'none';
if (myFile.value.length == 0)
{
_divUploadMessage.innerHTML = '<span style="color:#ff0000">Please select a file.</span>';
_divUploadMessage.style.display = '';
myFile.focus();
return;
}
var regExp = /^(([a-zA-Z]:)|(\{2}w )$?)(\(w[w].*))(.doc|.txt|.xls|.docx |.xlsx)$/;
if (!regExp.test(myFile.value)) //Somehow the expression does not work in Opera
{
_divUploadMessage.innerHTML = '<span style="color:#ff0000">Invalid file type. Only supports doc, txt, xls.</span>';
_divUploadMessage.style.display = '';
myFile.focus();
return;
}
_ifrFile.contentWindow.document.getElementById('Upload').submit();
_divFrame.style.display = 'none';
}
}
функция UploadComplete(сообщение, ошибка)
{
предупреждение(сообщение);
//предупреждение(ошибка);
clearUploadProgress();
if (_UploadProgressTimer)
{
clearTimeout(_UploadProgressTimer);
}
_divUploadProgress.style.display = 'none';
_divUploadMessage.style.display = 'none';
_divFrame.style.display = 'none';
_tbNext.style.display='';
if (message.length)
{
var color = (isError) ? '#008000' : '#ff0000';
_divUploadMessage.innerHTML = '<span style="color:' color ';font-weight:bold">' message '</span>';
_divUploadMessage.style.display = '';
_tbNext.style.display='';
_tbRetry.style.display='none';
}
}
tblRetry and tblNext are the tables that I want to display depending on the result of the event.