使用JavaScript更改按钮文本不会';t在歌剧院工作(11.11)为<;输入类型=";提交/&燃气轮机;元素。为什么?

使用JavaScript更改按钮文本不会';t在歌剧院工作(11.11)为<;输入类型=";提交/&燃气轮机;元素。为什么?,javascript,jquery,html,opera,Javascript,Jquery,Html,Opera,为什么更改按钮文本在Opera 11.11中不适用于以下元素 <input type="submit" value="Asdasd" id="blahblah_button" /> 这是“纯”JS代码: 为什么他们都没有在Opera 11.11中工作?它在IE、Chrome和FF中工作,但令我惊讶的是它在Opera中不工作 我必须提到,它也适用于Opera中的按钮标签: <button id="test_button" onclick="$(this).text('Blahb

为什么更改按钮文本在Opera 11.11中不适用于以下元素

<input type="submit" value="Asdasd" id="blahblah_button" />
这是“纯”JS代码:

为什么他们都没有在Opera 11.11中工作?
它在IE、Chrome和FF中工作,但令我惊讶的是它在Opera中不工作

我必须提到,它也适用于Opera中的按钮标签:

<button id="test_button" onclick="$(this).text('Blahblah');">Some text</button> 
一些文本
提前感谢您的回答


编辑一(0:40) 我忘了提到修改后查询按钮的值会得到它似乎工作正常的结果,这意味着它会更改JSDOM中的结构,但不会适当地重新显示可见按钮

这是您可以尝试此行为的示例代码:


更改按钮文本
按钮标签-工作
按钮文本(按钮标签)

输入标签(类型:提交)-不工作

输入标签(类型:按钮)-工作

获取blahblah_submit_类型的值


编辑二。(4:41) 但我还必须提到,它确实适用于“button”类型的输入元素,所以我用这样的元素补充了上面的代码。我还标记了哪些类型有效,哪些类型无效


编辑三。
同时,我测试了它,但它在Opera中不起作用这是Opera中的一个bug。我不确定是什么原因导致了它,但是一个重命名按钮的简单测试页面不会触发任何问题,但是在@Darin的jsfiddle.net示例中,这个错误确实出现了

这似乎是一个重新绘制的错误。我注意到按钮的宽度改变以匹配新标签,但实际标签没有改变。此外,从页面移开并返回,将显示新标签而不是旧标签

我快速地在谷歌上搜索了一下,却找不到其他人

以下是我发现的一个解决方法:

$('#blahblah_button').val('there');
$('#blahblah_button').get(0).outerHTML = $('#blahblah_button').get(0).outerHTML;

也许有人可以找到一个更干净的解决方法,理想的情况是将其内置到jQuery的
val()
方法中。但是最好的解决方案显然是Opera来修复这个bug。你应该给他们发封电子邮件。

@Abhi Beckert,事实上有人发现了这个bug- 我已经对它进行了测试,它可以工作:

<html>
<input type="submit" value="A" id="blahblah" onClick="click_input(this)" />
<script>
    function click_input(input)
    {
        input.value = "test";
        input.type = "submit";
    }
</script>
</html>

功能点击输入(输入)
{
input.value=“测试”;
input.type=“提交”;
}

是的,这很奇怪,但我希望歌剧院的人能很快解决它。顺便说一句,你能报告他们吗

我用js找到了另一种方法:

document.getElementById('blahblah_button').innerText = "testText";

我没有Opera11.11要测试,但当你在这里导航时,你看到了什么:?如果你没有看到提交按钮的值,我会非常惊讶。这肯定意味着jQuery和/或Opera 11.11中存在一个bug,我会再次感到非常惊讶。@BoltClock,当然这应该可以工作:-),但它在Opera 11中对我不起作用。11@Darin这种代码在opera中并不总是有效的。将其更改为不使用jQuery也并不总是有效。如果我运行脚本,按钮名称不会更改。有趣的是,如果我转到另一个页面并按“后退”返回JSFIDLE页面,按钮名称会变为“废话”。@Darin:刚刚在Opera 11.11/Ubuntu11.04中尝试过——这真的不起作用,这让我很惊讶。适用于“文本”、“收音机”和“复选框”输入类型,不适用于“提交”类型。非常奇怪。非常感谢你,阿比·贝克特!这似乎真的是一个歌剧特有的bug。我一定会给Opera的开发团队发封邮件。您的变通方法非常有效!:)再次感谢!哇,纳什,这真的很有效,谢谢你!!但我真的很抱歉,我只能接受一个答案((Abhi Beckert快了一点。但是你的评论也真的很有帮助!!非常感谢!:)我也投了你的票。是的,我试着尽快向Opera报告。:)我只是在寻找合适的论坛和/或电子邮件地址来报告这个错误。@Abhi Beckert:我引用我自己(从我写给nash的帖子的第一条评论):“我也投了你的票。“我已经向这里的Opera发送了一份报告:希望他们能尽快修复它。”谢谢你报告一个错误-你能给我一个问题的参考,我会踢它吗?如果您提供了您的电子邮件地址,您应该已经收到了电子邮件确认,其中包括错误号(通常是DSK)和一些数字。谢谢:)事实上,它已经被发现了,并且正在进行修复:-D
$('#blahblah_button').val('there');
$('#blahblah_button').get(0).outerHTML = $('#blahblah_button').get(0).outerHTML;
<html>
<input type="submit" value="A" id="blahblah" onClick="click_input(this)" />
<script>
    function click_input(input)
    {
        input.value = "test";
        input.type = "submit";
    }
</script>
</html>
document.getElementById('blahblah_button').innerText = "testText";