新的jQuery,简单的弹出窗口脚本,有什么问题吗?

时间:2009-11-18 13:47:01

标签: javascript jquery

关于jQuery仍然有点“枪声”。这个简单的弹出窗口脚本看起来不错吗?我的jQuery逻辑是对的吗?

我在代码评论中有几个问题,我很好奇。

$( document ).ready( function()
{
    $( "a[target='popup']" ).click( function( event )
    {
        var $href = $( this ).attr( 'href' ); // should I use "this.href"?
        var $name = $( this ).attr( 'target' ); // does the window name matter?
        var $config = 'width=590, height=590, top=20, left=60, scrollbars=1';
        var $popup = window.open( $href, $name, $config );

        if ( window.focus ) // is this even necessary?
                            // any other conditions I should check instead?
        {
            $popup.focus();
        }
        event.preventDefault(); // should this be above $popup.focus()?
    });
});

它似乎有效,但由于此脚本对于获取我网站上的RSS订阅者非常重要,我认为我确定了。

3 个答案:

答案 0 :(得分:1)

//我应该使用“this.href”吗? 不,使用jquery选择器 - 如果你要使用$(this)很多,在开始时将它放入一个变量中,这样你就不会每次都创建jquery对象的开销(你做两次,所以你要两次创建一个jquery对象。

//窗口名称是否重要? 如果您想稍后对窗口执行任何操作,例如关闭它或更改它的位置,您将需要该名称。它只是窗口的一个句柄。

//这是否必要? 这只是确保您可以执行您要尝试的操作 - 这是一项功能测试,以确保您不会在focus()方法不可用时生成错误。

//我应该检查其他任何条件吗? 不 - 测试你要调用的功能(你在关注弹出窗口时调用它)。

//这应该高于$ popup.focus()吗? 不。最好把它留到最后,因为这是另一个开发人员寻找它的地方。完成你想要做的所有事情,然后将其弹出以阻止事件冒泡。

最后,变量名称的$前缀是什么?您可能希望保存PHP的练习,因为$现在是jquery的句柄。

$(document).ready( function() {
    $("a[target='popup']").click( function(event) {
        var myObject = $(this);
        var href = myObject.attr("href");
        var name = myObject.attr("target");
        var config = "width=590, height=590, top=20, left=60, scrollbars=1";
        var popup = window.open(href, name, config);

        if ( window.focus ) {
                popup.focus();
        }
        event.preventDefault();
    });
});

答案 1 :(得分:1)

你的javascript功能是正确的。以下是每个问题的解释:

1)我应该使用this.href吗?
不,你不应该因为那不是jquery做事的方式。 Javascript实现可能因浏览器而异,并且此jQuery函数将确保调用在其要支持的每个浏览器中返回正确的值。虽然this.href可能有用,但不能保证它会,但jQuery会起作用(在它打算支持的浏览器中)。

2)窗口名称是否重要?
是。使用这个jQuery脚本的目的是控制出现的窗口,但是,即使用户禁用了javascript,链接也应该起作用(定位到命名窗口)。这个javascript旨在让你控制窗口的样子。

3)这是必要的吗?
是的,这可以追溯到您无法保证支持某些JavaScript功能。对window.focus的调用只是检查此浏览器中此元素是否存在焦点函数。如果它确实存在,它将尝试将焦点设置为该元素,如果它不存在,它将不会在浏览器中显示为脚本错误(糟糕的用户体验)。

4)应该高于$ popup.focus()?
这让浏览器知道您已成功创建并自行弹出窗口,并且该事件应该停止工作(从而取消浏览器打开新窗口的默认事件)。

答案 2 :(得分:0)

window.focus

  

发出请求将窗口带到   前方。它可能由于用户而失败   设置和窗口不是   保证在此之前是最重要的   方法返回。

event.preventDefault()

  

如果事件可以取消,则取消该事件,   不停止进一步传播   事件。

如果你将这一点放在焦点方法之上,我认为不会有任何区别。