带有文本区域内容的警报(HTML到JavaScript)

3

我很新手,尝试使用HTML,PHP和JavaScript进行编码。我的难点是如何在JavaScript文件中通过警报(alert)显示来自HTML文件的textarea中的信息。HTML代码如下:

    <head>
        <title> My Form</title>
        <script type= "text/javascript" src ="./JavaScript/validaLinha.js"></script>
    </head>
    <body>
        <form name="Linhas" method="POST" action="Linhas-p.php">
             <textarea name="descricaoLinha" onFocus="resetField('descricaoLinha')"> TEXT-TEXT-TEXT</textarea>
        </form>
    </body>

从 HTML 代码可以看出,我试图将文本框的名称发送到一个名为“resetField”的 JavaScript 函数中。让我们看看“resetField”是什么:

function resetField(field){
    d = document.Linhas;

    alert("It's entering the function."); //ANSWER = It's entering the function.
    alert(field);                         //ANSWER = descricaoLinha
    alert(d.field.value);                 //ANSWER = Nothing.
    alert(d.getElementById(field).value); //ANSWER = Nothing.
}

无法获取文本区域的值! 事件调用函数(第一个提示框弹出),函数接收到字符串(第二个提示框显示文本区域的名称),但我需要的另外两个却没有显示出来。我已经尝试过调整提示框的顺序,因为JavaScript在出现错误时不会继续读取代码。
强调一下,我需要的是文本区域中的内容。(这个文本区域的名称已经被正确地接收了)
谢谢阅读!抱歉我的英语不好。^^

尝试使用d.descricaoLinha.value。 - bksi
你能在 Fiddle 上发布这个吗?我无法复制这个问题。 - Jude Duran
3个回答

5
为您的文本区域添加一个ID
<textarea id="descricaoLinha" name="descricaoLinha" onFocus="resetField('descricaoLinha')"> TEXT-TEXT-TEXT</textarea>

然后,发送ID而不是name

alert(d.getElementById(field).value);

这段代码无法找到元素descricaoLinha,因为它正在搜索具有ID = "descricaoLinha"的元素。


2
你对为什么它不起作用的解释并不完全正确。d.field.value正在寻找名称为field的元素,而不是descricaoLinhaidd[field].value可以工作。但是,是的,使用id可能更好,并且最好不要使用内联处理程序属性。 - Ry-
@minitech,我没有解释为什么 d.field.value 不起作用。我只是解释了为什么 d.getElementById(field) 没有起作用。这是因为 ID 的原因,对吧? :) - Jude Duran
我尝试了@JudeDuran,但它没有起作用。弹出框和文本区域内容没有显示出来。Minitech提供的解决方案在这里起作用了。我仍然不知道为什么,哈哈哈。 - ArturLP

2

你的“field”只是一个字符串,不是JavaScript对象,当然它没有name属性;

这与d = document.linha;类似。

你需要通过其id属性获取DOM元素:

d = document.getElementById("Linha");


编辑:你还需要为你的field添加id属性

<textarea id="descricaoLinha" name="descricaoLinha" onFocus="resetField('descricaoLinha')"> ...

一种解决方案是:您将JavaScript函数更改为
function resetField(fieldId) {
    var field = document.getElementById(fieldId);
    alert(field);           // object
    alert(field.value);     // text field value    
    // Do whatever you want with the field object here 
}

调试时应该打开控制台并使用console.log('输出')而不是使用alert(); 您可以通过按Ctrl + Shift + K来打开Firefox控制台


现在的浏览器调试器有很棒的功能,你可以查看复杂的对象并获取交叉引用以真正追踪你的脚本。我完全同意@simpleton的说法,alert不是调试脚本的好方法! - Ben Philipp

0

你应该在你的onfocus处理程序中传入this

onFocus="resetField(this);"

像这样访问:

alert("It's entering the function."); 
alert(field.name);                       
alert(field.value);

这是一个演示:http://jsfiddle.net/RbUZr/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接