'action'是jQuery中的关键字吗?

时间:2009-12-23 15:55:06

标签: jquery html action keyword

我遇到了这个问题,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的实现一无所知。 =)

6 个答案:

答案 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)

无法重现您的问题

检查此网站http://jsbin.com/ixixu3

对于所有不同的选择器,alert总是显示1(在Opera 10.10,IE6,FF 3.5.6中测试)

答案 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>的是什么?很好,我们会再保存一次。

感谢大家的帮助!你所有的帖子都让我最终意识到这一点,太糟糕了,我不能给每个人一个复选标记,但我会给大家一个投票!