-1

I'm trying to çreate a jquery popup script OO style. I'm doing this because I would like to expand this code with more jquery/javascript without losing oversight. The errors I'm receiving are Object #<HTMLDivElement> has no method 'centerPopup' and Resource interpreted as Script but transferred with MIME type text/x-c: I'm new to OO javascript, but have quite the experience in OO PHP

function popup(){

    var popupStatus = 0;

    $(document).ready(function () {
        $("#button").click(function()
        {
            this.centerPopup();
            this.loadPopup();
        });

        $("#backgroundPopup").click(function()
        {
            this.disablePopup();
        });

        $(document).keypress(function(e)
        {
            if(e.keyCode==27 && popupStatus==1)
            {
                this.disablePopup();
            }
        });

    });

      this.loadPopup = function (){
        if(this.popupStatus==0)
        {
            $("#backgroundPopup").css(
            {
                "opacity": "0.7"
            });
            $("#backgroundPopup").fadeIn("slow");
            $("#popupContact").fadeIn("slow");

        this.popupStatus = 1;
        }
    }

    this.disablePopup = function (){
        if(this.popupStatus==1)
        {
            $("#backgroundPopup").fadeOut("slow");
            $("#popupContact").fadeOut("slow");
            this.popupStatus = 0;
        }
    }

    this.centerPopup = function (){
        var windowWidth = document.documentElement.clientWidth;
        var windowHeight = document.documentElement.clientHeight;
        var popupHeight = $("#popupContact").height();
        var popupWidth = $("#popupContact").width();

        $("#popupContact").css(
        {
            "position": "absolute",
            "top": windowHeight/2-popupHeight/2,
            "left": windowWidth/2-popupWidth/2
        });

        $("#backgroundPopup").css(
        {
            "height": windowHeight
        });
    }
}

var popup = new popup()


<!DOCTYPE HTML>

<html>
<head>
<link rel="stylesheet" href="css/popup.css" type="text/css" media="screen" />
<script src="http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js" type="text/javascript"></script>
<script src="js/popup2.js" type="text/javascript"></script>
</head>
<body>

    <center>
        <div id="button"><input type="submit" value="Popup!" /></div>
    </center>

    <div id="popupContact">
        <a id="popupContactClose">x</a>
    </div>

    <div id="backgroundPopup"></div>

</body>
</html>
2

1 Answer 1

2
 $("#button").click(function()
        {
            this.centerPopup();
            this.loadPopup();
        });

this isn't what you actually think. It's not the instance of popup, but the DOM element (#button). You can fix this by saving a reference on your instance at the beginning of your class:

function popup(){
    var self = this;
    this.popupStatus = 0; // you should use `this` here

    $(document).ready(function () {
        $("#button").click(function()
        {
            self.centerPopup();
            self.loadPopup();
        });
/* ... snip ... */
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.