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

New to jQuery, simple popup window script, any problems?

提问人:Jeff 提问时间:11/18/2009 更新时间:11/18/2009 访问量:1505

问:

对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 订阅者很重要,我想我会确保的。

JavaScript jQuery

评论


答:

0赞 rahul 11/18/2009 #1

窗口焦点

请求将窗口带到 前面。它可能由于用户而失败 设置,窗口不是 保证在此之前最前沿 方法返回。

event.preventDefault()

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

我认为如果你在焦点方法上面给出这个,不会有任何区别。

1赞 Fenton 11/18/2009 #2

我应该使用“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();
    });
});

评论

0赞 Jeff 11/18/2009
@Sohnee:非常感谢!变量上的 $ 前缀帮助我记住我正在使用函数中定义的 JS 变量。如果它没有造成任何伤害,除非有令人信服的理由,否则我可能会坚持下去。
1赞 Nick Larsen 11/18/2009 #3

你的javascript函数是正确的。以下是对每个问题的解释:

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

2) 窗口名称重要吗?
是的。使用此jQuery脚本的目的是控制出现的窗口,但是,即使用户禁用了javascript,链接也应该起作用(以命名窗口为目标)。此 javascript 旨在让您控制窗口的外观。

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

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