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

问题描述 投票:10回答:5

我正在编写一个在线应用程序,我将一些文本保存到数据库中。 有5个“textarea”-s和5个“输入类型=文本”-s。 我也在实现搜索,以便轻松查找和编辑数据库条目。将显示一个新的选择窗口(使用prototype和ajax),当单击其任何条目时,将填充以下表单(它与用于添加新结果的表单相同)。现在问题就出现了.... 如果我添加一个新表单或编辑任何已修改的现有的所有TEXTAREA字段,被锁定或类似的东西(只有textareas,输入仍然有效)......他们将不再服从Javascripts .update,所以他们不要当我选择下一个条目时改变....或者至少在FireFox中使用它们(3.5.something)。它在IE中工作正常,但由于我是一个FF用户,我不想在那里工作,我想知道是否有人遇到任何类似的问题并轻松解决它。 当我调用form.reset()时问题似乎消失了,但这会混淆一些代码生成的select / option字段,除此之外我不想保留数据。

对我来说,看起来FF决定我输入的文本比javascript尝试输入的文本更重要,所以它覆盖了它......我无法弄清楚为什么。在这一点上,我责备.update(),但我不知道如何做到这一点。 INPUT字段似乎与.update有问题(或者它对我来说不起作用),所以我不得不将它们重写为.value =(也尝试过.value和textareas,希望能解决任何问题,遗憾的是徒劳无功)。

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

javascript textarea
5个回答
8
投票

我有同样的问题。当HTML解析为DOM对象时,textarea的内容是innetHTML<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");

3
投票

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


1
投票

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

$('#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);
});

问题似乎是如果用户键入textarea(#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);
});

1
投票

我只是简单地解决了这个奇怪的问题

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

即使修改了textarea,脚本也会覆盖。

修改textarea后,innerHTML没有为我工作。


0
投票

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

<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" width="75" 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 = "";
    }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.