提问人:Jeff 提问时间:11/17/2009 最后编辑:Jeff 更新时间:11/17/2009 访问量:174
第一个jQuery脚本,简单的Form Focus,有什么问题吗?
First jQuery script, simple Form Focus, any problems?
问:
在研究了一段时间的文档后,我想出了我的第一个jQuery脚本。这是一个简单的表单焦点脚本。只是想确保我做对了。
我找不到任何关于jQuery的“条件语句”的内容,所以我假设你只使用标准的JavaScript /语句。if
else if
为了测试是否存在,jQuery文档解释说我应该使用。#id
.length
$(document).ready( function() {
if ($('#one').length) {
$('#one').focus();
}
else if ($('#two').length ) {
$('#two').focus();
}
else {
return false; // is this even necessary?
}
});
编辑:
有可能并且将存在于同一页面上,所以我想先定位。#one
#two
#one
答:
你的脚本是准确的,尽管正如你所预期的那样,没有必要在你的 else 子句中返回任何内容(甚至不需要一个)
根据界面的显示方式...例如,元素 1 和 2 是否会同时存在,如果没有,您可以执行以下操作:
$(document).ready( function() {
$('#one').focus();
$('#two').focus();
}
如果它们将一起存在于同一页面上,那么这很好:
$(document).ready( function() {
if ($('#one').length) {
$('#one').focus();
}
else {
$('#two').focus();
}
}
如果没有返回任何元素,.focus() 实际上不会失败或任何东西,所以你可以自由地在一行中完成它,而没有条件。
此外,返回 false 位不是必需的。
评论
#one
#two
您无需测试长度。如果包装集为空,则不调用 Focus 函数。如果仅存在 #one 或 #two,则以下操作正常:
$(function() { // shorthand for $(document).ready()
$('#one, #two').focus();
});
评论
.filter(:first)
#one
#one
#two
$('#one, #two').filter(':first').focus();
你所做的在功能上是正确的。但是,随着jQuery的推进,您将不想进行多次查找。这将是更好的编写方式:
$(document).ready( function() {
var $one = $("#one"), $two = $("#two");
if ( $one.length ) $one.focus();
else if ( $two.length ) $two.focus();
});
每次使用 $(“#id”) 时,它都会执行查找。如果第一次可以将其缓存在变量中,则可以节省以后查找的时间。我的变量名称中的符号完全是任意的,但它可以帮助您记住哪些变量具有 jQuery 包装的对象。var $one = $("#one")
$
评论
vars
jQuery()
$()
你的逻辑总体上是正确的,尽管在使用jQuery时,你确实可以减少使用标准Javascript所需的cheks和检测的数量
在jQuery对象上调用方法或属性不会返回错误,即使找不到该对象(例如 )
$("#one")
您可以一次获取多个 DOM 元素(例如 ),也可以一次对所有这些对象调用方法 `
$("#one,#two")
- 无需在结束时返回任何东西
$(document).load(function(){...})
因此,在ming中拥有所有这些要点,您可以像这样更新脚本:
$(document).ready(function() {
$('#one,#two').focus();
});
编辑:
既然你表示要首先选择,那么在两者和都存在于同一页面上的情况下,你所要做的就是将引用放在列表的末尾,如果它存在,它将是始终被选中的引用。#one
#one
#two
#one
$('#two,#one').focus();
评论
#one
#two
if
else if
#one
#two
$('#one, #two').filter(':first').focus();
评论