第一个jQuery脚本,简单的Form Focus,有什么问题吗?

时间:2009-11-17 15:06:48

标签: jquery

在研究了docs一段时间之后,我想出了我的第一个jQuery脚本。这是一个简单的Form Focus脚本。只是想确保我做对了。

我找不到任何与jQuery有关的“条件语句”,所以我假设你只使用标准的JavaScript if / else if语句。

为了测试#id是否存在,jQuery文档说明我应该使用.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

5 个答案:

答案 0 :(得分:3)

你不需要测试长度。如果包装的集合为空,则不会调用焦点函数。如果只存在#one或#two,那么以下工作正常:

$(function() {  // shorthand for $(document).ready()
       $('#one, #two').focus();
});

答案 1 :(得分:1)

你的脚本是准确的,虽然你没有必要像你预期的那样返回你的else子句中的任何内容(甚至没有)

答案 2 :(得分:1)

取决于界面的显示方式...例如,元素1和2是否同时存在,如果不存在,您可以这样做:

$(document).ready( function() {
  $('#one').focus();
  $('#two').focus();
}

如果它们将在同一页面上存在,那么这很好:

$(document).ready( function() {
  if ($('#one').length) {
    $('#one').focus();
  }
  else {
    $('#two').focus();
  }
}

如果没有返回任何元素,.focus()实际上不会失败或任何东西,所以你可以在没有条件的情况下在1行中自由地进行。

此外,不需要返回false位。

答案 3 :(得分:1)

你的逻辑通常是正确的,虽然使用jQuery你可以真正减少cheks&使用标准Javascript

进行检测
  • 即使未找到对象(例如$("#one")),调用jQuery对象上的方法或属性也不会返回错误

  • 您可以一次获取多个DOM元素(例如$("#one,#two")),您也可以同时调用所有这些对象上的方法 `

  • 您无需在$(document).load(function(){...})
  • 结尾处归还任何内容

因此,您可以更新您的脚本:

$(document).ready(function() {
  $('#one,#two').focus();
});

修改

由于您表示要首先选择#one,如果同一页面上同时存在#one#two,您只需要{{1}在列表末尾的引用,如果它存在,它将始终被选中。

#one

答案 4 :(得分:0)

您所做的是功能正确。然而,随着jQuery的推进,您不希望进行多次查找。这将是一种更好的写作方式:

$(document).ready( function() {
    var $one = $("#one"), $two = $("#two");
    if ( $one.length ) $one.focus();
    else if ( $two.length ) $two.focus();
});

每次使用$(“#id”)时,都会执行查找。如果你可以像var $one = $("#one")那样第一次将它缓存在变量中,那么以后可以节省查找时间。我的变量名中的$符号是完全随意的,但它可以帮助您记住哪些变量包含jQuery包装对象。