jQuery:如何从"这个"获得价值宾语?

时间:2016-02-18 16:31:22

标签: javascript jquery

我点击了打开新弹出窗口的一个帮助器,我在对象内部设置默认值时出现问题。我需要为弹出窗口计算TOP和LEFT位置的位置以使新弹出窗口居中。这是完整的代码:

/*
    $(element).onPopup(options); - Open Popup window
    -Ths function open new popup window on your browser

    EXAMPLE:
    ----------------------------------------------
    <a href="http://google.com">Google</a>

    $("a#link").onPopup({
        name        :   "Popup Window",
        width       :   800,
        height      :   600
    });

    OPTIONS:
    ----------------------------------------------
    attr            // attribute where is located link
    name            // name of popup window
    width           // max width
    height          // max height
    left            // position left    (px)
    top             // position top (px)
    resizable       // resizable 1 or 0
    location        // display location 1 or 0
    fullscreen      // open in full screen  1 or 0
    scrollbars      // display scroll bars  1 or 0
    titlebar        // display title bar    1 or 0
    toolbar         // display tool bar     1 or 0
    directories     // display directories  1 or 0
*/
$.fn.onPopup=function(options){
    var s   = {
            attr        :   "href",
            name        :   "Popup Window",
            width       :   700,
            height      :   600,
            left        :   ($(window).width()/2)-(this.width/2),
            top         :   ($(window).height()/2)-(this.height/2),
            resizable   :   0,
            location    :   0,
            fullscreen  :   0,
            scrollbars  :   1,
            titlebar    :   0,
            toolbar     :   0,
            directories :   0
        },
        $element    = this;

    s = $.extend(s,options);

    $element.on("click",function(e) {
        e.stopPropagation(); e.preventDefault();
        window.open(
            $(this).attr(s.attr), s.name, "width="+s.width+", height="+s.height+", directories="+s.directories+", toolbar="+s.toolbar+", titlebar="+s.titlebar+", scrollbars="+s.scrollbars+", fullscreen="+s.fullscreen+", location="+s.location+", resizable="+s.resizable+", top="+s.top+", left="+s.left
        );
     });
};

这就是我的问题所在:

var s   = {
             /*...*/

                width       :   700,
                height      :   600,
                left        :   ($(window).width()/2)-(this.width/2),
                top         :   ($(window).height()/2)-(this.height/2),

             /*...*/

            },

如何将宽度/高度传递给另一个对象?

2 个答案:

答案 0 :(得分:2)

一种方法是首先创建对象,然后添加引用对象中其他属性的额外属性

var s   = {
        attr        :   "href",
        name        :   "Popup Window",
        width       :   700,
        height      :   600,
        left        :   null, //calculated if not user provided
        top         :   null  //calculated if not user provided
       ....
    };

// update user settings
s = $.extend(s,options);

// calculate based on actual values
if(s.left === null){
   s.left =  ($(window).width()/2)-(s.width/2);
}
if(s.top === null){
   s.top  =  ($(window).height()/2)-(s.height/2);
}

另请注意,您应该return this.each(..并在那里开展业务,以便在选择器包含多个元素时使用单独的实例,并使插件可以与其他jQuery方法链接

答案 1 :(得分:0)

根据代码评论中的API,您希望调用者能够指定自己的<figure class="left"> <img class="top" src="top10.jpg" width="400" height="300"/> <figcaption> Fig1. Production value and quantity of the 10 top commodities </figcaption> </figure> <figure class="right"> <img class="average" src="average.jpg" width="400" height="300"/> <figcaption> Fig2. Averages per metric ton </figcaption> </figure>left位置。

因此,您需要检查是否已经给出任何值,然后根据配置的宽度和高度计算默认位置。

top