Reputation: 21893
I get an error "popup undefined" anyone know why?
here is my code edit: http://jsfiddle.net/aDFSR/13/
edit:
<html>
<head>
</head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.1.js"></script>
<script type="text/javascript">
var popupInstance = null;
function createCrossBrowserPopup(){
alert("creating");
return new _popup();
}
function _popup() {
this.wnd = null;
this.hiddenFrame = null; //workaround for IE 6 - with divs and select (divs are appearing behind select elements)
this.showHiddenFrame = showHiddenFrame;
this.displayPopupContainer = displayPopupContainer;
this.html = "";
this.setHTML = _setHTML;
this.show = _show;
this.hide = _hide;
this.triggerElementId = null;
this.blur = null;
}
function _setHTML(html, event) {
this.html = html;
if (this.wnd != null) {
this.wnd.html(this.html);
}
if (event != null)
stopEventPropagation(event, null);
}
/// leftOffset: the left offset of the popup
/// topOffset: the top offset of the popup
/// width: the width of the popup
/// height: the height of the popup
/// element: the element which causes the popup to be opened
/// event: the event which cased the popup to be opened
function _show(leftOffset, topOffset, width, height, element, event) {
// Hide previous popup if existed
if (popupInstance != null && element.id != popupInstance.triggerElementId) {
popupInstance.hide();
return;
}
// if popupInstance != null this means that the same popup was called, makes no sense to create it again
if (popupInstance == null){
leftOffset = leftOffset != null ? leftOffset : 0;
topOffset = topOffset != null ? topOffset : 0;
this.displayPopupContainer(element, width, height, leftOffset, topOffset);
//workaround for IE 6 - with divs and select (divs are appearing behind select elements)
this.showHiddenFrame(element, width, height, leftOffset, topOffset);
// end of workaround
setElementsPosition(element, leftOffset, topOffset);
// save the id, onblur event of the element that fires the popup
// and also save the instance of this object - for $(document).click and $(window).resize
this.triggerElementId = element.id;
this.blur = element.onblur;
element.onblur = null;
popupInstance = this;
}
stopEventPropagation(event);
}
function _hide() {
$(".modal_popup_container").hide();
if (this.triggerElementId != null) {
// Assign back the blur event (using simple Javascript, not jQuery as it is causing onblur to be fired 2 times) and reset some variables
$('#' + this.triggerElementId)[0].onblur = this.blur;
if ($.isFunction(this.blur)) {
$('#' + this.triggerElementId)[0].onblur();
}
else
if(typeof(this.blur) == 'string')
{
var regex = new RegExp('(?=[\w.])this(?!\w)/g');
eval(this.blur.replace(regex, '$(\'#' + this.triggerElementId + '\')[0]'));
}
// reset variables
this.triggerElementId = null;
this.blur = null;
popupInstance = null;
}
}
function displayPopupContainer(element, width, height, leftOffset, topOffset) {
if (this.wnd == null) {
this.wnd = $('<div />');
this.wnd.addClass('modal_popup_container');
this.wnd.css({
'position' : 'absolute',
'z-index' : '999',
'margin' : '0'});
}
this.wnd.css({ 'width': width, 'height': height });
this.wnd.html(this.html);
this.wnd.show();
var parentElement = $(element).parent();
$(parentElement).append(this.wnd);
}
function showHiddenFrame(element, width, height, leftOffset, topOffset) {
if (this.hiddenFrame == null) {
this.hiddenFrame = $('<iframe />');
this.hiddenFrame.addClass('modal_popup_container');
this.hiddenFrame.attr({
"src": "javascript:'<html></html>';",
"scrolling": "no",
"frameborder": 0
});
this.hiddenFrame.css({
"position": "absolute",
"border": "none",
"display": "block",
"z-index": "998",
"margin": "0"
});
}
this.hiddenFrame.css({ "width": width, "height": height });
this.hiddenFrame.show();
var parentElement = $(element).parent();
$(parentElement).append(this.hiddenFrame);
}
function setElementsPosition(element, leftOffset, topOffset) {
$(".modal_popup_container").position({
my: "left top",
at: "left bottom",
of: $(element),
offset: leftOffset + " " + topOffset,
collision: "fit"
});
}
function stopEventPropagation(event)
{
// manage FireFox and IE events, check if event was passed, else try and get window.event
var e = (!event) ? window.event : event;
// avoid that the current click event propagates up
if (typeof (e) != "undefined") {
if (e.stopPropagation)
e.stopPropagation();
else e.cancelBubble = true;
}
}
// hide the popup when user clicks outside it
$(document).click(
function(event) {
if ($(event.target).closest('.modal_popup_container').get(0) == null
&& popupInstance != null) {
popupInstance.hide();
}
});
$(window).resize(
function(event) {
if (popupInstance != null) {
popupInstance.hide();
}
});
</script>
<script language="javascript" type="text/javascript">
var popup = createCrossBrowserPopup();
popup.setHTML("<div style='width:100%; height:100%;
background-color:#AAFFEE;border-width: 2px; border-color: silver; border-style:
solid;' onclick='changePopupHTML();'> test </div>", null);
function changePopupHTML() {
popup.setHTML("<div style='width:100%; height:100%; background-color:#AA11EE;border-width: 2px; border-color: silver; border-style: solid;'> test222 </div>", null);
}
</script
<body>
<input type="text" id="txtExample" onclick="popup.show(25, 0, 100, 50, this, event);" />
</body>
</html>
Upvotes: 0
Views: 368
Reputation: 2201
Second edit: In your latest version, the problem is that the javascript you enter in the javascript frame appears in the head tag. You're then referencing the variable from the body tag. This works:
Upvotes: 1