Javascript 输入文本时如何更改输入字段的背景色?
我对Javascript和jQuery非常陌生,似乎无法确定我的代码为什么会这样做 我创建了两个看似相同的函数来更改输入字段的背景色。 他们的目标是,如果在字段中键入任何内容,则将给定输入字段的背景色转换为00FF7F颜色。如果不是这样,这个领域应该是透明的 代码JS:Javascript 输入文本时如何更改输入字段的背景色?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我对Javascript和jQuery非常陌生,似乎无法确定我的代码为什么会这样做 我创建了两个看似相同的函数来更改输入字段的背景色。 他们的目标是,如果在字段中键入任何内容,则将给定输入字段的背景色转换为00FF7F颜色。如果不是这样,这个领域应该是透明的 代码JS: $(document).ready(function () { var $input1 = $("#logindata1"); var $input2 = $("#logindata2"); funct
$(document).ready(function () {
var $input1 = $("#logindata1");
var $input2 = $("#logindata2");
function onChangeInput1() {
$input1.css("background-color", "#00FF7F");
var value = $.trim($(".form-control").val());
if (value.length === 0) {
$input1.css("background-color", "transparent");
}
}
function onChangeInput2() {
$input2.css("background-color", "#00FF7F");
var value = $.trim($(".form-control").val());
if (value.length === 0) {
$input2.css("#background-color", "transparent");
}
}
$input1.on("keyup", onChangeInput1);
$input2.on("keyup", onChangeInput2);
});
css:
简单HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Test</title>
<!-- Stylesheet link -->
<link rel="stylesheet" type="text/css" href="assets/style.css">
<!-- jQuery link -->
<script type="text/javascript" src="assets/vendor/jquery-3.1.0.min.js"></script>
</head>
<body>
<div id="loginbox">
<div class="logindata" id="logindata1">
<input type="text" class="form-control" placeholder="Username">
</div>
<div class="logindata" id="logindata2">
<input type="password" class="form-control" placeholder="Password">
</div>
</div>
<!-- Javascript link-->
<script type="text/javascript" src="assets/js/javascript.js"></script>
</body>
在上面的jsbin中,尝试键入用户名和密码字段,查看它们的反应如何不同
所发生事情的图像。不希望在此处包含所有图像:
我意识到可能有一种方法可以将我的js/jquery折衷为一个函数,每个输入字段调用一个函数,而不是每个字段都有一个函数。您的值检查不正确。使用jQuery,每次都要检查两个输入的值 尝试检查您感兴趣的单个输入
$(document).ready(function () {
var $input1 = $("#logindata1");
var $input2 = $("#logindata2");
function onChangeInput1() {
$input1.css("background-color", "#00FF7F");
var value = $.trim($input1.val());
if (value.length === 0) {
$input1.css("background-color", "transparent");
}
}
function onChangeInput2() {
$input2.css("background-color", "#00FF7F");
var value = $.trim($input2.val());
if (value.length === 0) {
$input2.css("#background-color", "transparent");
}
}
$input1.on("keyup", onChangeInput1);
$input2.on("keyup", onChangeInput2);
});
当长度为0时,代码将清除背景色。它检查长度的方法是使用以下代码片段:
var value = $.trim($(".form-control").val());
选择器$.form控件将选择CSS类为.form控件的所有元素。这是一个问题,因为它们不止一个;在这种情况下,它将始终返回找到的第一个元素的值
您应该通过按ID搜索来更改代码以检查特定控件,如下所示:
var value = $.trim($("#logindata1 input").val()); //get user ID
var value = $.trim($("#logindata2 input").val()); //get password
如果这两个字段都是必需的,那么这里有一个更简单的解决方案,只使用CSS 将所需的属性添加到标记中,然后使用伪类:valid 代码段: 登录箱{ 宽度:400px; 高度:200px; 左边距:自动; 右边距:自动; 利润率最高:25%; } 罗吉娜达先生{ 左边距:自动; 右边距:自动; 边缘顶部:20px; 高度:60px; 宽度:290px; 过渡:0.25秒缓解; } .表格管制{ 左边距:自动; 右边距:自动; 高度:55px; 宽度:288px; 边框样式:无; 背景色:透明; 文本对齐:居中; 边框:实心2px00ff7f; 过渡:0.25秒缓解; 字体大小:25px; 字体系列:投石机MS; } .窗体控件:悬停{ 盒影:0px 0px 30px 2E8B57; } :-webkit输入占位符{ 颜色:00FF7F; } .form控件:有效{ 背景色:00FF7F; } jsFiddle: jQuery
$(document).ready(function() {
$('.change-background').on('change', function() {
var $this = $(this);
var value = $.trim($this.val());
// toggleClass can be provided a bool value,
// If we provide true we add class, if false we remove class
$this.toggleClass('filled-background', value.length !== 0);
}).change();
// We also want to call a 'change' event on
// all inputs with the change-background class just incase the page has
// pre-filled in values
});
不必监听keyup事件,然后运行函数,只需在change事件上创建一个侦听器,同样,如果我们只需将一个类应用于希望背景颜色更改的所有输入,那么我们只需创建一个侦听器,它将对具有类change background的任何输入执行此操作
Html
还有旁注
监听keyup返回时,可能有人想复制并粘贴用户名和密码,如果他们这样做,则使用右键单击并粘贴不会触发keyup事件。您有一些小错误,但无需担心。我们可以解决它 第一个问题 其他答案指出了一些重要的问题:您正试图通过表单控件类选择所有元素来获得值 var值=$.trim$.form-control.val 可以这样做,用已经声明的变量$input1和$input2替换选择器。这样:
var value = $.trim($input1.val());
var value = $.trim($input2.val());
第二
嗯。第一个问题解决了。第二个问题在第二个函数中。您试图设置无效的css:$input2.cssbackground-color,透明
什么时候应该是:$input2.cssbackground-color,透明;没有
下一个
很好。下一个。您正在设置的id logindata1和logindata2位于您的DIV上。因此,您错误地试图获取div的值,而不是输入的值。您可以通过添加输入来修复选择器,方法如下:
var $input1 = $("#logindata1 input");
var $input2 = $("#logindata2 input");
最后
因此,最后,它应该起作用:
$(document).ready(function () {
var $input1 = $("#logindata1 input");
var $input2 = $("#logindata2 input");
function onChangeInput1() {
$input1.css("background-color", "#00007F");
var value = $.trim($input1.val());
if (value.length === 0) {
$input1.css("background-color", "transparent");
}
}
function onChangeInput2() {
$input2.css("background-color", "#00007F");
var value = $.trim($input2.val());
if (value.length === 0) {
$input2.css("background-color", "transparent");
}
}
$input1.on("keyup", onChangeInput1);
$input2.on("keyup", onChangeInput2);
});
卓越的方法。您还可以将if语句替换为简单的$this.toggleClass'filled-background',value.length!==0;@robsonrosa是的,该死的,我忘了你可以在toggleClass中提供一个bool:D欢呼声将更新答案谢谢你的回复!:它工作得非常好-这些注释帮助我清楚地理解了代码中发生的事情,因此非常感谢您帮助我学习:@Alex听到这个消息太好了:,如果其中任何一个是正确的答案,请您勾选适当的一个,谢谢。@Canvas嘿,很抱歉,我的回复被延迟了-我现在已经这么做了:我勾选了一个CSS解决方案,因为它是对我最有效的解决方案,但是所有的js/jquery答案让我对listen事件有了更好的理解,所以谢谢你:D
.filled-background {
background-color: #00FF7F;
}
var value = $.trim($input1.val());
var value = $.trim($input2.val());
var $input1 = $("#logindata1 input");
var $input2 = $("#logindata2 input");
$(document).ready(function () {
var $input1 = $("#logindata1 input");
var $input2 = $("#logindata2 input");
function onChangeInput1() {
$input1.css("background-color", "#00007F");
var value = $.trim($input1.val());
if (value.length === 0) {
$input1.css("background-color", "transparent");
}
}
function onChangeInput2() {
$input2.css("background-color", "#00007F");
var value = $.trim($input2.val());
if (value.length === 0) {
$input2.css("background-color", "transparent");
}
}
$input1.on("keyup", onChangeInput1);
$input2.on("keyup", onChangeInput2);
});