Javascript将文本和背景的颜色更改为输入值

Hol*_*erg 6 javascript text colors submit

我将使用javascript来创建一个函数来同时更改背景颜色以及文本 - 基于文本输入的值.我已经改变了背景颜色,但无法设法使文本正常工作.

function changeBackground() {
    // The working function for changing background color.
    document.bgColor = document.getElementById("color").value;

    // The code I'd like to use for changing the text simultaneously - however it does not work.
    document.getElementById("coltext").style.color = document.getElementById("color").value;
}
Run Code Online (Sandbox Code Playgroud)

查看上面的代码,document.getElementById("coltext").style.color = x当我输入实际颜色而不是"颜色"值时,文本的代码会起作用.

这是我所指的html(我知道它可怕的优化,但它正在进行中):

<form id="TheForm" style="margin-left:396px;">
    <input id="color" type="text" onchange="changeBackground();" />
    <br/><input id="submitColor" value="Submit" type="button" onclick="changeBackground();" style="margin-left:48px; margin-top:5px;" />
</form>

<span id="coltext">This text should have the same color as you put in the text box</span>
Run Code Online (Sandbox Code Playgroud)

显然,不幸的是,我不能以这种方式使用代码.但无论如何我都努力尝试,除此之外,我达到了一种无限的复杂性.它应该是解决这个问题的一种简单方法,对吧?

Xot*_*750 7

在你的问题的代码中,事情似乎有点混乱,所以我将给你一个我认为你试图做的事情的例子.

首先考虑的是混合HTML,Javascript和CSS:

为什么在HTML中使用onClick()是一种不好的做法?

不引人注目的Javascript

内联样式与类

我将删除内联内容并将它们拆分为适当的文件.

接下来,我将使用"点击"事件并放弃"更改"事件,因为您不清楚您是否想要或两者都需要.

您的函数changeBackground将背景颜色和文本颜色设置为相同的值(您的文本将不会被看到),因此我缓存颜色值,因为我们不需要在DOM中查找两次.

CSS

#TheForm {
    margin-left: 396px;
}
#submitColor {
    margin-left: 48px;
    margin-top: 5px;
}
Run Code Online (Sandbox Code Playgroud)

HTML

<form id="TheForm">
    <input id="color" type="text" />
    <br/>
    <input id="submitColor" value="Submit" type="button" />
</form>
<span id="coltext">This text should have the same color as you put in the text box</span>
Run Code Online (Sandbox Code Playgroud)

使用Javascript

function changeBackground() {
    var color = document.getElementById("color").value; // cached

    // The working function for changing background color.
    document.bgColor = color;

    // The code I'd like to use for changing the text simultaneously - however it does not work.
    document.getElementById("coltext").style.color = color;
}

document.getElementById("submitColor").addEventListener("click", changeBackground, false);
Run Code Online (Sandbox Code Playgroud)

jsfiddle

资料来源:w3schools

颜色值

CSS颜色使用十六进制(十六进制)表示法来定义红色,绿色和蓝色颜色值(RGB)的组合.可以给予其中一个光源的最低值是0(十六进制00).最高值为255(十六进制FF).

十六进制值写为3个双位数字,以#符号开头.

更新:正如@Ian指出的那样

十六进制可以是3或6个字符长

资料来源:W3C

数值颜色值

十六进制表示法的RGB值格式为"#"后紧跟三个或六个十六进制字符.三位RGB表示法(#rgb)通过复制数字而不是通过添加零来转换为六位数形式(#rrggbb).例如,#fb0扩展为#ffbb00.这确保可以使用短符号(#fff)指定白色(#ffffff)并删除对显示颜色深度的任何依赖性.

这是一个替代函数,它将检查您的输入是否为有效的CSS Hex Color,它将仅设置文本颜色,或者如果它无效则抛出警报.

对于正则表达式测试,我将使用此模式

/^#(?:[0-9a-f]{3}){1,2}$/i
Run Code Online (Sandbox Code Playgroud)

但如果你是正则表达式匹配并希望将数字分成组,那么你需要一个不同的模式

function changeBackground() {
    var color = document.getElementById("color").value.trim(),
        rxValidHex = /^#(?:[0-9a-f]{3}){1,2}$/i;

    if (rxValidHex.test(color)) {
        document.getElementById("coltext").style.color = color;
    } else {
        alert("Invalid CSS Hex Color");
    }
}

document.getElementById("submitColor").addEventListener("click", changeBackground, false);
Run Code Online (Sandbox Code Playgroud)

jsfiddle

这是一个进一步的修改,将允许按名称和十六进制颜色.

function changeBackground() {
    var names = ["AliceBlue", "AntiqueWhite", "Aqua", "Aquamarine", "Azure", "Beige", "Bisque", "Black", "BlanchedAlmond", "Blue", "BlueViolet", "Brown", "BurlyWood", "CadetBlue", "Chartreuse", "Chocolate", "Coral", "CornflowerBlue", "Cornsilk", "Crimson", "Cyan", "DarkBlue", "DarkCyan", "DarkGoldenRod", "DarkGray", "DarkGrey", "DarkGreen", "DarkKhaki", "DarkMagenta", "DarkOliveGreen", "Darkorange", "DarkOrchid", "DarkRed", "DarkSalmon", "DarkSeaGreen", "DarkSlateBlue", "DarkSlateGray", "DarkSlateGrey", "DarkTurquoise", "DarkViolet", "DeepPink", "DeepSkyBlue", "DimGray", "DimGrey", "DodgerBlue", "FireBrick", "FloralWhite", "ForestGreen", "Fuchsia", "Gainsboro", "GhostWhite", "Gold", "GoldenRod", "Gray", "Grey", "Green", "GreenYellow", "HoneyDew", "HotPink", "IndianRed", "Indigo", "Ivory", "Khaki", "Lavender", "LavenderBlush", "LawnGreen", "LemonChiffon", "LightBlue", "LightCoral", "LightCyan", "LightGoldenRodYellow", "LightGray", "LightGrey", "LightGreen", "LightPink", "LightSalmon", "LightSeaGreen", "LightSkyBlue", "LightSlateGray", "LightSlateGrey", "LightSteelBlue", "LightYellow", "Lime", "LimeGreen", "Linen", "Magenta", "Maroon", "MediumAquaMarine", "MediumBlue", "MediumOrchid", "MediumPurple", "MediumSeaGreen", "MediumSlateBlue", "MediumSpringGreen", "MediumTurquoise", "MediumVioletRed", "MidnightBlue", "MintCream", "MistyRose", "Moccasin", "NavajoWhite", "Navy", "OldLace", "Olive", "OliveDrab", "Orange", "OrangeRed", "Orchid", "PaleGoldenRod", "PaleGreen", "PaleTurquoise", "PaleVioletRed", "PapayaWhip", "PeachPuff", "Peru", "Pink", "Plum", "PowderBlue", "Purple", "Red", "RosyBrown", "RoyalBlue", "SaddleBrown", "Salmon", "SandyBrown", "SeaGreen", "SeaShell", "Sienna", "Silver", "SkyBlue", "SlateBlue", "SlateGray", "SlateGrey", "Snow", "SpringGreen", "SteelBlue", "Tan", "Teal", "Thistle", "Tomato", "Turquoise", "Violet", "Wheat", "White", "WhiteSmoke", "Yellow", "YellowGreen"],
        color = document.getElementById("color").value.trim(),
        rxValidHex = /^#(?:[0-9a-f]{3}){1,2}$/i,
        formattedName = color.charAt(0).toUpperCase() + color.slice(1).toLowerCase();

    if (names.indexOf(formattedName) !== -1 || rxValidHex.test(color)) {
        document.getElementById("coltext").style.color = color;
    } else {
        alert("Invalid CSS Color");
    }
}

document.getElementById("submitColor").addEventListener("click", changeBackground, false);
Run Code Online (Sandbox Code Playgroud)

jsfiddle