我遇到了这个问题,jQuery在过去一天半的时间内无法在我的HTML中找到<form>
元素。我通过验证器多次运行我的HTML,验证了我的JS和CSS,甚至删除了不必要的JS和CSS文件,现在简化为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css" />
</head>
<body>
<form>
<input type="textbox" name="action" value="view"></input>
<button>Test</button>
</form>
</body>
</html>
在将我的HTML简化为简单之后,我检查了jQuery是否可以使用<form>
简单地抓取$('form')
元素。好吧,jQuery没有返回任何内容。它完全被废弃了。它什么都没有返回,甚至没有返回jQuery对象。所以我再次继续我的疯狂,验证HTML等等,仍然没有!
我第二次重写HTML,但不完全相同,并且它有效!所以我对这两个文件进行了差异化,并开始调整原始文件,逐渐变得与我刚刚编写的新文件完全相同。事实证明,name
属性的价值是导致一切搞砸的罪魁祸首!只需将值更改为action
以外的任何值,jQuery就可以最终获取<form>
元素!真?! !@#%$!@#!
所以我的问题是: action
是jQuery中的关键字,属性的值如何搞定一切?
如果它是一个关键词并且您不想解释原因,请指点我这方面的文档,这样我就可以在阅读之后将自己置于头脑中。一个属性的价值会让事情变得棘手似乎仍然很奇怪,但这可能是因为我对jQuery的实现一无所知。 =)
答案 0 :(得分:1)
动作是jQuery中的一个关键字,属性的值如何搞砸了所有内容?
不,不是。你的问题出在其他地方。也许您正试图直接在HTML头中获取表单,而不是等待页面完成加载。
E.g。你做了
<script>
alert($('form').length); // May return 0 depending on the browser used.
</script>
...
<form>
...
</form>
而不是
<script>
$(document).ready(function() {
alert($('form').length); // Always returns 1.
});
</script>
...
<form>
...
</form>
答案 1 :(得分:1)
我只是复制/粘贴了您的示例代码并添加了
<script type="text/javascript">
jQuery('form').html('It works fine');
</script>
...表单元素之后。表单的内容被替换为“工作正常”,所以没有,jQuery没有那个问题。
答案 2 :(得分:1)
如果我没记错的话,如果使用name =“action”,Internet Explorer(6)中可能会出现问题。不知何故,动作是一个保留词。不记得后果的想法,但东西没有用。因此,如果您使用的是MSIE,请尝试其他浏览器。
答案 3 :(得分:1)
答案 4 :(得分:0)
ACTION是FORM标记的必需属性。
修改
您给出的示例不是有效的HTML。尝试:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('form').css({"border":"1px solid red"});
});
</script>
</head>
<body>
<form action="">
<fieldset><legend>Test</legend>
<input type="text" name="action" value="view"/>
<button>Test</button>
</fieldset>
</form>
</body>
</html>
答案 5 :(得分:0)
感谢所有人的所有信息。我应该提到我使用的是FF3.5并使用Firebug控制台进行测试。我会加载页面,然后在Firebug中执行$('form')
。每次将name
属性设置为action
时,它都不会返回任何内容。将其更改为其他内容后,在Firebug控制台中执行相同的代码行将起作用。
阅读完每个人的帖子后,我通过在<script>
部分添加<head>
元素来修改我的HTML:
<head>
<title>Test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.0r4/build/reset/reset-min.css" />
<script type="text/javascript">
$(function(){
alert($('form').length);
});
</script>
</head>
这完全没问题。所以我想我的错误在于我的测试方法。在Firebug控制台中使用$('form').length
不会产生任何结果。我应该使用这一行:$(function(){$('form');});
$(function(){$('form');})`我不认为在尝试选择之前我需要先检查文档是否已准备好使用Firebug控制台的表单元素; 我错了。
故事的道德:即使在Firebug中,您仍需要在选择元素之前检查文档是否准备就绪。
但令我困扰的是,当name
属性不 action
时,我的原始测试方法适用于Firebug控制台。所以也许真正的问题应该是:对于action
元素的name
属性,Firebug的价值为<input>
的是什么?很好,我们会再保存一次。
感谢大家的帮助!你所有的帖子都让我最终意识到这一点,太糟糕了,我不能给每个人一个复选标记,但我会给大家一个投票!