提问人:Jeff 提问时间:11/18/2009 更新时间:11/18/2009 访问量:1505
jQuery新手,简单的弹出窗口脚本,有什么问题吗?
New to jQuery, simple popup window script, any problems?
问:
对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 订阅者很重要,我想我会确保的。
答:
请求将窗口带到 前面。它可能由于用户而失败 设置,窗口不是 保证在此之前最前沿 方法返回。
如果事件可取消,则取消该事件, 不停止进一步传播 事件。
我认为如果你在焦点方法上面给出这个,不会有任何区别。
我应该使用“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();
});
});
评论
你的javascript函数是正确的。以下是对每个问题的解释:
1) 我应该使用 this.href 吗?
不,你不应该,因为这不是jquery做事的方式。Javascript 实现可能因浏览器而异,此 jQuery 函数将确保调用在其要支持的每个浏览器中返回正确的值。虽然 this.href 可能有效,但不能保证它会有效,但 jQuery 会有效(在它打算支持的浏览器中)。
2) 窗口名称重要吗?
是的。使用此jQuery脚本的目的是控制出现的窗口,但是,即使用户禁用了javascript,链接也应该起作用(以命名窗口为目标)。此 javascript 旨在让您控制窗口的外观。
3) 有必要吗?
是的,这可以追溯到您不能保证支持某些 javascript 功能。调用 只是检查此浏览器中此元素是否存在 focus 函数。如果它确实存在,它将尝试将焦点设置为该元素,如果它不存在,则不会在浏览器中显示为脚本错误(糟糕的用户体验)。window.focus
4) 这应该高于 $popup.focus()?
这是让浏览器知道您自己成功创建并弹出了窗口,并且该事件应该停止工作(从而取消浏览器打开新窗口的默认事件)。
评论