Я не могу понять, как закрыть простое всплывающее окно - PullRequest
1 голос
/ 19 декабря 2011

Извините, за упрощенный вопрос. Я не уверен, важно ли все это или нет, но я упомяну это на всякий случай. : Когда пользователь нажимает на ссылку, происходит следующее:

function begin(some info) is called->Makes an Ajax request to backend PHP->
PHP calls the callback function->Callback function calls another JS function that creates a popup->
In the popup creating function, The Save button is assigned a function that makes an ajax request and sends PHP some user input.->
PHP makes a callback to another function that does nothing.

Здесь эта функция объединяет всплывающее окно.

function collection(name, description, data){
    var json = data;
    var cont = openSitePopup("400","300");
    //We create div objects.
    var namecell = ce("div","sitePopupCell");   
    //Stuff
    // We create a button and assign the createProducts Method to it.
    var sbtbutton = createBtn("submitObject","SAVE","createProducts()");
    //We append all the div objects to the popup.   
    cont.appendChild(namecell);
    //..
}

function openSitePopup(width,height) {

//try to center the popup if values are not passed
var xPos = (getWinWidth()/2) - (width/2) + sl;
var yPos = (getWinHeight()/2) - (height/2) + st;

sitepopupwin = ge("sitePopupWin");
clearElement(sitepopupwin);

var winhandle = ce("div","","sitePopupHandle");

sitepopupwin.style.display = "block";
//Other style assignments.  

//closebutton
var close = ce("img","sitePopupCloseBtn");
close.setAttribute("src",theme_path + "/images/icons/close.png");

//start adding goodies
var mydiv = ce("div","sitePopupContainer");

winhandle.appendChild(close);
winhandle.appendChild(createCleaner());
sitepopupwin.appendChild(winhandle);
sitepopupwin.appendChild(mydiv);

//return reference to the container for adding stuff
return mydiv;
}

function createProducts()
{
    //Some exciting Ajax stuff with a callback to writeNewFolder()
}

function writeNewFolder(data){
    //Nothing of interest here...yet.
}

Теперь, когда я нажимаю кнопку Save во всплывающем окне, запрос выполняется успешно, но всплывающее окно не закрывается. Я знаю о функции Window.Close(), но она не сработала. cont.Close() кажется очевидным выбором, но в этом случае я получаю эту ошибку: Uncaught TypeError: Object #<HTMLDivElement> has no method 'Close' Итак, Cont - это только элемент div. Метод openSitePopup() возвращает только div.

Спасибо за вашу помощь.

редактирование:

function ce(elementType,elementClass,elementId,txt) {

var e = document.createElement(elementType);

//add optional parameters
if (elementId) e.setAttribute("id",elementId);
if (elementClass) setClass(e,elementClass);

//append extra text.  If passed an object, append with without the textnode wrapper
if (isData(txt)) {
    if (typeof(txt)=="object") e.appendChild(txt);
    else e.appendChild(ctnode(txt));
}

return e;

}

Надеюсь, первоначальный создатель не против, чтобы я разместил здесь его код. Ну, это бесплатно и с открытым исходным кодом, так что все должно быть хорошо ... Я думаю.

edit 2: функция ge. Это просто.

function ge(element) {
return document.getElementById(element);
}

1 Ответ

1 голос
/ 19 декабря 2011

Вы не опубликовали функции ge и ce, которые создают всплывающее окно, которое НЕ является window, следовательно, вы не можете .close() it

попробовать

ge('sitePopupWin').style.display='none';

или

var popup = ge('sitePopupWin');
popup.parentNode.removeChild(popup);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...