是否记录了以下行为(即我应该依赖它)?
由于错误,我有一个对话框,并在javascript中使用一个简单的单词引用它的id。令人惊讶的是,我没有收到错误,代码按预期工作,
示例(在JSFiddle.net here上)有2个简单的对话框
<div id="Hello">
<input id="box1" name="box1" type="text" value="not change">
</div>
<div id="Goodbye">
<input id="box1" name="box1" type="text" value="not change">
</div>
javascript缺少第Hello = $("#Hello");
行。
$("#Hello").dialog({
autoOpen:false,
modal:true,
width:"auto"}
);
$("#Hello").dialog("open");
$("#Goodbye").dialog("open");
$('[name="box1"]',Hello).val("test");
令人惊讶的是,最后一行更新了Hello
div中的文本框,但我找不到记录此行为的任何地方。它只是一个模糊的副作用,不是依赖,或者这是一个有效的jQuery选择器样式?
仅供参考,我使用的是Chrome版本32.0.1700.107 m。
答案 0 :(得分:4)
是的,这是预期的行为。由于您的页面上有一个ID为“Hello”的元素,因此在窗口上自动定义一个指向该元素的属性,相当于:
window.Hello = document.getElementById("Hello");
这已经在所有浏览器中存在了很长一段时间,我不确定在哪里,甚至是否记录在案。 jQuery没有这样做。
通常建议不要依赖于此,因为通过定义名称与id相同的变量可以轻松地将其打破。它还会破坏某些功能,例如,提交提交按钮id="submit"
将无法拨打form.submit()
答案 1 :(得分:1)
$('[name="box1"]',Hello)
向DOM查询属性name
等于box1
的元素,因此您的小提琴起作用。第二个参数是上下文,但是undefined
,jQuery将其解析为整个document
。
答案 2 :(得分:0)
jQuery构造函数仍然可以工作,你刚刚传入undefined
上下文,它仍然可以在文档范围内找到名为“box1”的元素。
答案 3 :(得分:-1)
在同样的小提琴例子中试试这个:
$(text).val("test");
它输入了输入字段的值,因为它在属性和属性中找到它匹配它