我有一个按钮标签和输入标签,它的文本与我要执行的值不同,请参见下文。
<button value="<%=RS("field1")%>" name="change" id="change">Change</button>
这在 Firefox 中工作得很好,但在 IE 中.. dun,dun,dunnnn ...按钮的值返回为单词“change”,这意味着按钮显示的文本。
我通常只使用和输入标签,但我想我只能使用按钮标签
有什么办法可以解决这个问题吗?
来自 w3schools.com:
重要提示:如果您使用按钮 HTML 表单中的元素,不同 浏览器将提交不同的值。 Internet Explorer 将提交文本
和<button>
之间 标签,而其他浏览器将提交 value 属性的内容。 使用输入元素创建 HTML 表单中的按钮。</button>
因此,你应该做的是
<input type="button" />
在这种情况下,我通常所做的是将信息嵌入到
name
属性中,这样你就可以
<button name="change:<%=RS("field1")%>" id="change:<%=RS("field1")%>">Change</button>
然后使用服务器端代码丢弃返回的值,然后将名称分解回 {name, value) 对。
(请注意,您的“id”无论如何都必须是唯一的。)
据我所知,没有办法解决这个问题。这就是 IE 处理按钮标签的方式,它将在开始和结束标签之间发送文本。
考虑到您无法对按钮使用普通的输入标签,那么使用隐藏字段来传达您想要使用的方法怎么样?
<form action="somepage" method="POST">
<!-- some fields here -->
<input type="hidden" name="action" value="<%=RS("field1")%>" />
<button name="change" id="change">Change</button>
</form>
在我看来,所需的值始终位于按钮的“值”属性中(因为这是其他浏览器提交的值),所以为什么不简单地:
<button ... onclick="this.innerHTML=this.value;" ... >
IE8 确实发送了值,所以这只是 IE7(可能也是 6,但谁在乎)问题。
无论如何,一个可能的技巧是将值作为文本的一部分隐藏,然后在按钮单击事件中(使用 JavaScript)将按钮文本更改为该值。
最终结果如下所示:
<button value="<%=RS("field1")%>" name="change" onclick="this.innerHTML = this.childNodes[1].innerHTML;"><span>Change</span><span style="display: none;"><%=RS("field1")%></span></button>
另外,当您在循环中使用此 ID 时,请勿设置 ID 以避免多个元素共享相同的 ID - 这是无效的,如果您出于某种原因需要 ID,请在每次迭代中为其添加唯一的内容。
正如我上面所描述的,不要检查对 {button_name,button_value} 中的值,而是仅检查输入集中存在的button_name,而不检查其值。