【问题标题】:How to make a simple jQuery button in XHTML strict with no form postback?如何在没有表单回发的情况下严格地在 XHTML 中制作一个简单的 jQuery 按钮?
【发布时间】:2009-09-26 14:30:12
【问题描述】:

我正在使用 DOCTYPE XHTML Strict 创建一个网站,如果我在 form 之外有 输入按钮按钮元素,它会报错。

所以我把它放在一个表单中,它抱怨我没有 action 属性。

所以我输入了一个 action 属性,然后将按钮回发到页面,这是我不想要的。

我怎样才能在 XHTML strict 中有一个带有绑定事件的普通 jQuery 按钮?

<form action="">
    <div>
        <input id="button1" type="button" value="highlight it"  /> 
        <input id="button2" type="button" value="toggle title" />
        <p>here is another paragraph</p>    
    <div id="show1">What color is the sky?</div>
    <div id="answer1">blue</div>
        <button id="button1">Show Answer</button>
    </div>
</form>

【问题讨论】:

  • 如果它只适用于 jQuery,为什么不使用 jQuery 创建该元素?

标签: jquery forms xhtml button


【解决方案1】:

我正在使用 DOCTYPE XHTML Strict 创建一个网站,如果我在表单外有输入按钮或按钮元素,它会报错。

不,没有表单的输入/按钮是完全可以接受的。实际上,在 DTD 中没有办法表达输入必须有一个表单祖先的限制,所以 XHTML 不能禁止它,如果它愿意的话。如果您有验证错误,则不是这样。大概是这样的:

<button id="button1">Show Answer</button>

您已经有了一个带有id="button1" 的元素。 id 必须是唯一的。

当您不打算提交表单时,通常不应包含表单元素。但是,有一种情况需要:将一组具有相同控制 nameradio 输入分组。如果他们没有表单祖先,他们就不知道他们是连接的,所以浏览器往往不会让他们独占。

在这种情况下,通常的习惯用法是将所需的action属性设置为"#",并在始终返回false的表单中添加onsubmit处理程序,这样当启用JS时,表单将永远不会提交。 不要将此return false 放在按钮本身上,因为表单可能通过按钮单击以外的其他方式提交:特别是 Enter 键。

所以我输入了一个 action 属性,然后将按钮回发到页面,这是我不想要的。

&lt;input type="button"&gt; 不会提交表单。 &lt;button&gt; 也不应该,但它在 IE 中是由于浏览器使用错误的默认 type 值的错误。所以你必须写&lt;button type="button"&gt;

【讨论】:

  • 谢谢,问题是它不在 DIV 标签中,我不需要 FORM 标签,现在可以使用
【解决方案2】:

诀窍是从您的 click() 处理程序中返回 false,如下所示:

$("#button_id").click(function() { /* do stuff.. */ return false; })

【讨论】:

    【解决方案3】:

    这就是你不应该使用 xhtml strict 的原因。如果你做某事的唯一原因是为了取悦验证者,那么验证者就错了。请改用html5,并按照您最初的方式进行操作,即没有表单。

    【讨论】:

    • 切换到 XHTML strict 的一般想法是这样我就可以轻松解析它,例如PHP 的 SimpleXML 或 C# 的 LINQ。我只是认为这是一个很大的好处。平衡灵活性和 XML 解析的最佳 DOCTYPE 是什么?
    • 如果您愿意,可以使用 XHTML5。但是 HTML5 与这个问题无关,input-without-form 在 XHTML1.0 中和 HTML5 中一样有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多