javascript - 尝试使用 getElementsByName 以选择多个 "placeholders"(JavaScript) 时出错

标签 javascript

我的这个脚本有一个功能,但它不按我想要的方式工作。看一下脚本,函数名为 display_Value():

<html>

    <head>
        <title>JavaScript</title>
        <!--Scripts-->
    <script type="text/javascript">
    <!--

    function noValue(id) {  
        var _value = document.getElementById(id).value;
        if (_value == "Skriv dit navn her") {
            document.getElementById(id).value='';
        }
    }

    function changeValue(id) {
        var _value = document.getElementById(id).value;
        if (_value == "") {
            document.getElementById(id).value='Skriv dit navn her';
        }
    }

    function display_Value() { 
        var val = document.getElementById("txt").value; 
        if (val != "Skriv dit navn her" && val != "") { 
            document.getElementsByName("placeholder").innerHTML = val; 
            document.getElementById("hidden").style.visibility="visible"; 
            destroy("destroy") 
        } 
    }

    function destroy(id) {
        var d = document.getElementById(id);
        d.parentNode.removeChild(d);
    }

    //-->
    </script>
</head>

<body>

    <div id="destroy">
    <input type="text" id="txt" value="Skriv dit navn her" onFocus="noValue('txt')" onBlur="changeValue('txt')">
    <input type="button" onClick="display_Value()" value="Click me" />
    </div>

    <div id="hidden" style="visibility: hidden">
    <p>Hello. Your entered value is: <span name="placeholder"></span> and it is repeated below</p>
    <span name="placeholder"></span>
    <span name="placeholder"></span>
    </div>

函数 noValue() 和 changeValue() 使原始值在焦点上消失,如果字段为空则返回蓝色。那部分有效。单击按钮时,文本框中的值应该显示在 <span name="placeholder"> 中。 -标签。那没有发生。用<div style="visibility:hidden">隐藏的隐藏文本如我所愿,已显示,但未显示该值。表格被破坏了,就像我想的那样。我哪里做错了? :)

Ps.: 如果您想知道“Skriv dit navn her”是什么意思,丹麦语的意思是“在这里写下您的名字”。

编辑

我再次分离了部分代码。我发现,如果我更换 getElementsByName("placeholder").innerHTML;getElementById("placeholder").innerHTML;并分配第一个 <span>使用 ID="placeholder",值显示在该特定的 <span> 中.然而,这并不是我想要的。我希望值显示在所有 3 个占位符中 - 怎么做?

另一个编辑

我知道可以通过为所有占位符分配 ID 来使这个脚本工作;我对此不感兴趣。我希望该函数以尽可能少的文本显示所有占位符中的值并且不重复。我认为这叫做 DRY/DIE :)

最佳答案

将您的 display_Value 函数替换为:

function display_Value() { 
    var val = document.getElementById("txt").value; 
    if (val != "Skriv dit navn her" && val != "") { 
        document.getElementsByName("placeholder").innerHTML = val; 
        document.getElementById("hidden").style.visibility="visible"; 
        destroy("destroy") 
    } 
} 

您正在获取占位符的值,而不是对其的引用。所以值(value)不会消失。您需要将其直接分配给占位符的 innerHTML。

关于javascript - 尝试使用 getElementsByName 以选择多个 "placeholders"(JavaScript) 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451554/

相关文章:

javascript - Chrome 扩展消息发送时页面重新加载?

javascript - ES6迭代解构

javascript - 使用 JavaScript .map() 和 .filter() 按 lang 搜索作者/书籍数据模块

javascript - 将 HTML 源代码转换为读取流

javascript - 如何在 JavaScript 中删除 ipv6 地址?

javascript - Knockout 绑定(bind) HTML 日期选择器的最小值和最大值

javascript - 使用预定义方法更改对象 Javascript 的属性

javascript - 如何让 ESLint 忽略其他文件中的类名和方法?

javascript - 是否可以在 javascript 中制作自己的自定义 native 对象?

javascript - 使用 Jquery 和 Ajax 上传文件时出错