使用Javascript更改输入文本值不会';换显示器

使用Javascript更改输入文本值不会';换显示器,javascript,Javascript,我正在尝试根据用户操作更改文本输入字段的值。我是这样做的: document.getElementById(textFieldID).value = newValue; 这不是很有效——字段中的原始文本仍保留在屏幕上,没有改变。但是,当我提交表单时,它的行为就好像值确实被正确更改了一样。(调试警报确认了这一点,是的,我正在点击代码的那一部分并传递正确的字段ID和文本值。)有人有什么见解吗?我是否需要做些什么来重新绘制输入元素? 编辑:根据Jeff B的请求,以及这似乎让每个人都感到困惑的事实,

我正在尝试根据用户操作更改文本
输入
字段的值。我是这样做的:

document.getElementById(textFieldID).value = newValue;
这不是很有效——字段中的原始文本仍保留在屏幕上,没有改变。但是,当我提交表单时,它的行为就好像值确实被正确更改了一样。(调试
警报
确认了这一点,是的,我正在点击代码的那一部分并传递正确的字段ID和文本值。)有人有什么见解吗?我是否需要做些什么来重新绘制
输入
元素?
编辑:根据Jeff B的请求,以及这似乎让每个人都感到困惑的事实,下面是一些相关的代码:


<script LANGUAGE="JavaScript" TYPE="text/javascript">
   function changeText(changeSelector)
   {
      var myindex  = document.getElementById(changeSelector+"Recent").selectedIndex;
      var SelValue = document.getElementById(changeSelector+"Recent").options[myindex].value;
      document.getElementById(changeSelector).value = SelValue;
      document.getElementById("historicalText").value = SelValue;
      document.getElementById("historicalTextSelect").value = changeSelector;
   }
</script>

<input onChange="updateScrollingPreview1217(this); return true;" type="text" id="crawlMsg1217" name="crawlMsg1217" size="60" maxlength="1000" value="">

<select id="crawlMsg1217Recent" name="crawlMsg1217Recent" onchange="javascript:changeText('crawlMsg1217');">
[options go here]
</select>

函数changeText(changeSelector)
{
var myindex=document.getElementById(changeSelector+“最近”)。selectedIndex;
var SelValue=document.getElementById(changeSelector+“最近”)。选项[myindex]。值;
document.getElementById(changeSelector).value=SelValue;
document.getElementById(“historicalText”).value=SelValue;
document.getElementById(“historicalTextSelect”).value=changeSelector;
}
[此处有选项]
而那个“onChange”处理程序并不是把工作搞砸的原因;不管有没有,我都会有同样的行为。
编辑2:问题似乎是由我们产品使用的第三方拼写检查工具“JSpell”引起的。(有人告诉我,比起浏览器内置的拼写检查,客户更喜欢使用它;go figure。)在我的测试机器上,它似乎有点配置错误,所以我将尝试纠正这一点,并祈祷它能解决问题。如果没有。。。应该很有趣。

编辑3:是的。fsckingjspell。为了子孙后代,我刚刚发布了一个完整的答案,明天我被允许的时候我会接受的。我感谢所有试图帮助我的人+1的所有内容,希望我能提供更多。

页面上的任何其他元素都有与id相同的名称属性吗

Internet Explorer 8及更高版本。在IE8中 模式下,getElementById执行 ID上区分大小写的匹配 仅属性。在IE7模式和 在以前的模式中,此方法执行 两个ID上的匹配不区分大小写 和名称属性,这可能 产生意想不到的结果-


尝试通过返回元素的nodeName和id提醒用户,并确保它是您期望的输入。

文档的id实际上是“textFieldID”还是“textFieldID”是包含要更改的文本输入id的javascript变量?如果它不是一个变量,我相信你应该:

document.getElementById('textFieldID').value=newValue;

在没有上下文的情况下很难调试它,因为您的代码应该可以正常工作。您是否可以通过执行以下操作来确认已获得正确的节点:

document.getElementById(textFieldID).style.border = "4px solid red";

我已经确认罪犯确实是杰斯佩尔,确切的故障点是这条线:

window.onload=jspellInit

尽管上面编辑2中提到了祈祷,但确保正确配置并不能解决问题。这一行对于JSpell的功能是必不可少的。我不知道JSpell是否总是以这种方式使用Javascript功能,或者是否有某种完美的因素导致它与我的页面发生冲突,但这确实是我问题的根源


我要感谢所有试图帮助我的人。就获得正确答案而言,这显然是一个失败,因为它是由一个看起来完全不相关的组件引起的,因此我没有提到,但你至少证实了我(理论上)做得对,而不仅仅是发疯。

使用div元素而不是textfield。我也有同样的问题,我的文本字段是用另一个脚本更改的,没有得到正确的值。您可以轻松地将任何div元素(如textfield)与一些CSS一起使用。您可以使用innerHTML从div获取值。

是否在多个web浏览器上尝试过此操作?可能是web浏览器错误/行为不当。应该可以。旁注:
document.getElementById
用于通过元素的
id
属性获取元素。您似乎在暗示您正在传入字段的
name
属性。这只适用于IEManagu:我在IE6、IE7(在兼容模式下为8)、IE8和FF3中得到了相同的行为。好主意,但不是我的罪魁祸首。
textFieldID
在页面上是唯一的吗?如果隐藏的输入是
textFieldID
,而文本输入具有不同的id,则
newValue
仍将发布更新的值。请将“updateScrollingPreview1217”的代码包括在内,否。该元素具有相同的名称和ID,但没有其他元素具有相同的ID或名称。提醒我从getElementById中找到的对象的ID、节点名和类型,所有这些都给了我预期的结果;它是一个ID正确的输入文本对象。您是否尝试过使用inputElement.setAttribute('value',myValue)?很抱歉,这是一个变量,我已经用几种不同的方法确认了它的设置是否正确。嗯,看看完整的代码,真的很难排除故障。解决这个问题的一个非常糟糕的方法是在文本字段元素周围放置一个wrapper元素,然后更改wrapper元素的innerHTML。HTML:JS:document.getElementById('wrapperDiv').innerHTML=“”;哎呀+感谢你从背后偷偷摸摸地发现了这个问题,但是,是的,我想我宁愿忍受这个bug,也不愿把它强加给下一个处理代码的人。:-)哈哈,我同意了——我也不喜欢这个解决方案,但在没有其他解决方案的情况下,我想我会把它扔出去。我接受了你发布的代码片段——注释掉historicalText/historicalTextSelect,并为updateScrollingPreview1217创建了一个空函数——它按预期工作。我不得不认为在某个地方有冲突