手动写入后无法使用 javascript 更新 textarea

Posted

技术标签:

【中文标题】手动写入后无法使用 javascript 更新 textarea【英文标题】:Can't update textarea with javascript after writing to it manually 【发布时间】:2010-12-28 00:12:12 【问题描述】:

我正在编写一个在线应用程序,将一些文本保存到数据库中。 有 5 个“textarea”-s 和 5 个“input type=text”-s。 我还实现了搜索以轻松查找和编辑数据库条目。将显示一个新的选择窗口(使用原型和 ajax),当单击它的任何条目时,会填充下面的表单(它与用于添加新结果的表单相同)。 现在这就是问题出现的地方...... 如果我添加一个新表单或编辑任何现有的所有已修改的所有 TEXTAREA 字段,被锁定或类似的东西(只有文本区域,输入仍然有效)......他们将不再遵守 javascripts .update,所以他们不当我选择下一个条目时不会改变....或者至少他们不会在 FireFox 中(3.5.something)。它在 IE 中运行良好,但由于我是 FF 用户并且我不希望它在那里工作,我想知道是否有人遇到过任何类似的问题并轻松解决它。 当我调用 form.reset() 时问题似乎消失了,但这会弄乱一些代码生成的选择/选项字段,此外我不想保留数据。

在我看来,FF 认为我输入的文本比 javascript 试图输入的文本更重要,所以它会覆盖它......我不知道为什么。在这一点上,我责怪 .update(),但我不知道该怎么做。 INPUT 字段似乎与 .update 有问题(或者它对我不起作用),所以我不得不将它们重写为 .value= (也尝试过使用 textareas 的 .value ,希望可以解决任何问题,遗憾的是没用)。

那么,有没有人知道为什么会发生这种情况以及如何解决它,而不必在每一步都重置表单?

【问题讨论】:

你能提供一些代码给我们看看吗? 不再需要了,问题出在 .update() ... 我尝试了 innerhtml,它运行良好,只是为了踢我再次尝试 .value,它突然运行...我不知道昨天发生了什么(当我花了整个下午在这上面),它不想像它那样工作(我可能使用了 .text 而不是 .value,或者 php iduno 中有一些错误)无论如何很抱歉无故打扰大家 我认为你应该对自己的问题发表一个答案(只是说上面)然后检查它,这样这个问题就可以从未回答的问题队列中删除 【参考方案1】:

我遇到了同样的问题。当HTML解析为DOM对象时,textarea的内容为innetHTMLinnetHTML<textarea>

<textarea cols="10" rows="10">Content of textarea</textarea>

document.getElementByTagName('textarea').innerHTMLdocument.getElementByTagName('textarea').value 返回相同的值Content of textarea

但在加载 DOM 对象后,更改 innerHTML 值不会更改 textarea 框的内容。更改它的解决方案是修改 value 字段。

document.getElementByTagName('textarea').value="New content of textarea";

或在 jquery 中

$("textarea").val("New content of textarea");

【讨论】:

【参考方案2】:

.value 和 .innerHTML 似乎解决了这个问题

【讨论】:

由于某种原因,我不知道您需要将 textarea 的值设置为实际值。所以它与 HTML 不同。如果你想在 html 中给 textarea 一个值,你需要把你的值放在 textarea 标签之间。在 JS 中,您需要设置该值。所以请遵循:HTML:&lt;textarea&gt;Your value&lt;/textarea&gt; JS:document.getElementsByTagName("textarea")[0].value = "your value"【参考方案3】:

我有这个确切的问题。到目前为止我已经尝试过

$('#addofferlink').click(function()
    var offer = "#OFFER_"+$('#offer_id').val()+"#";
    $('#message').append(offer);
);

我也试过了,

    $('#addofferlink').click(function()
    var e = $('#message').html();
    var offer = "#OFFER_"+$('#offer_id').val()+"#";
    $('#message').html(e+offer);
);

问题似乎在于,如果用户在文本区域 (#message) 中键入内容,然后单击按钮添加优惠链接,则不会显示任何内容。查看源码,使用Firebug,我可以看到textarea中包含的实际文本正在被修改,但没有显示在屏幕上。

似乎 javascript 正在更改标记的 html 内容,但浏览器正在将当前键入的内容存储在内存中(我假设)或其他地方。

使用 val(e+offer) 更新 textarea 将删除输入的文本并用 offerlink 替换它,使用 innerHTML = e+offer 根本不起作用,显示 textarea 没有变化。


我已经整理好了!

我的想法围绕着这样一个事实,因为标签包含文本,并且有它自己的结束标签,所以我必须使用 .html() 来获取它的内容。

通过使用 .val() 获取字段的内容,您可以简单地提取和更新内容。我最终得到了以下结果,

    $('#addofferlink').click(function()
    var e = $('#message').val();
    var offer = "#OFFER_"+$('#offer_id').val()+"#";
    $('#message').val(e+offer);
);

【讨论】:

【参考方案4】:

我只是通过以下方式解决了这个奇怪的问题:

document.forms[0].text_area_name.value = "STUFF";

即使修改了文本区域,脚本也会覆盖。

innerHTML 在修改 textarea 后对我不起作用。

【讨论】:

【参考方案5】:

.innerHTML :指的是写在标签之间的内容。 这里,文本正在被写入文本区域,这会更改与 .innerHTML 关联的值,因此可以使用 .value 来获取更新的内容。

【讨论】:

【参考方案6】:

有时您可能希望在文本区域中显示一个特定的字符串,然后让 用户看到它是什么,然后可能对其进行更改;但是,你希望 让他们看到原文是什么。文本区域非常笨拙, 但使用此设置,即使手动更改已编辑的文本也是可逆的。

<button id="ShowNOWxItmDscptn" onClick="EditItmDesc(1)">What is it now?</button>
<button id="OpnTAxWriteNewEdit" onClick="EditItmDesc(2)">Write / Edit</button>
<textarea id="RUBYxDescribe" max="500"  placeholder="Magic"> </textarea>

// a global variable:
// UVarDescriptionTxt = ("This is the first line.\r\nSecond line!");

function EditItmDesc(x)
    console.log("*x* = "+x+".");
    console.log("Text to reset : "+UVarDescriptionTxt+".");

    var InnyShow = document.getElementById("RUBYxDescribe");
    InnyShow.value = UVarDescriptionTxt;

    if(x == 1) 
        InnyShow.innerHTML = "";
        InnyShow.textContent = "";
        InnyShow.innerHTML = UVarDescriptionTxt;
    

    if(x == 2)
        InnyShow.value = "";
    

上述结构为我解决了这个问题。

【讨论】:

以上是关于手动写入后无法使用 javascript 更新 textarea的主要内容,如果未能解决你的问题,请参考以下文章

VBA:更新后无法自动重新计算 Excel 公式 - 需要手动交互

NodeJS在写入后无法从telnet套接字接收数据

使用 JavaScript 或 jQuery 手动更新 UpdatePanel

即使设置了解决方案,也无法在更新 Swift 后使用 withMemoryRebound

使用gcc -pg -g编译后不会写入gmon.out

SWIFT:初始写入/删除后无法删除 Plist 文件