我的任务是在用户单击输入框时从输入框中删除占位符,并使标签可见。 如果用户没有再次填充任何内容,请放回占位符,并使标签不可见。
我可以隐藏它,但不能重新分配它。 我已经尝试了element.setAttribute(attribute,value),element.attribute = value和element。[attribute] = value类型,但是不起作用。
我保留了visibility
<label>
的默认"hidden"
我为任务创建了hide()和show()函数,它们都具有2个参数。
代码JavaScript:
var placehlder;
function hide(input_id,lbl){
var e1=document.getElementById(input_id);
placehlder=e1.getAttribute('placeholder');
/*document.write(placehlder);*/
e1.placeholder="";
var e2=document.getElementById(lbl);
e2.style.visibility="visible";
}
function show(input_id,lbl){
var e1=window.document.getElementById(input_id).value;
var e2=document.getElementById(lbl);
/*document.write(placehlder);*/
if (e1.length ==0)
{
e2.style.visibility="hidden";
e1.placeholder=placehlder;
/*e1.setAttribute('placeholder',placehlder);*/
/*e1['placeholder']=placehlder;*/
}
}
代码HTML:
<form>
<label id="first" >First Name</label><br/>
<input id="box" type="text" placeholder="First Name" onclick="hide(id,'first')" onfocusout="show(id,'first')"/>
</form>
完整代码:HTML + CSS + JAVASCRIPT:
var placehlder;
function hide(input_id,lbl){
var e1=document.getElementById(input_id);
placehlder=e1.getAttribute('placeholder');
/*document.write(placehlder);*/
e1.placeholder="";
var e2=document.getElementById(lbl);
e2.style.visibility="visible";
}
function show(input_id,lbl){
var e1=window.document.getElementById(input_id).value;
var e2=document.getElementById(lbl);
/*document.write(placehlder);*/
if (e1.length ==0)
{
e2.style.visibility="hidden";
e1.placeholder=placehlder;
/*e1.setAttribute('placeholder',placehlder);*/
/*e1['placeholder']=placehlder;*/
}
}
#first{
visibility: hidden;
}
#box{
}
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>
Functions
</title>
</head>
<body>
<form>
<label id="first" >First Name</label><br/>
<input id="box" type="text" placeholder="First Name" onclick="hide(id,'first')" onfocusout="show(id,'first')"/>
</form>
</body>
</html>
编辑1:
我已经通过@Darlesson的答案使用CSS解决了我的问题。
但是如果可能的话,请告诉我代码有什么问题。
编辑2:
正如@lenilsondc指出的那样,由于var e1
没有元素,但元素的value attribute
没有使我的代码无效。
var e1=window.document.getElementById(input_id).value;
替换为
var e1=window.document.getElementById(input_id);
曾与e1.placeholder=placehlder;
答案 0 :(得分:2)
我建议改用CSS作为占位符部分:
:focus::placeholder{
opacity: 0;
}
:focus::placeholder {
opacity: 0;
}
<input placeholder="Visible">
答案 1 :(得分:1)
您可以在不使用任何JS且仅使用HTML / CSS之类的条件下进行操作;
.group {
display: flex;
}
.group label {
display: none;
order: 1;
}
.group input {
order: 2;
display: block;
}
.group input:focus ~ label {
display: block;
}
/*
note: browser compatibility is only ~82%
https://caniuse.com/#feat=css-placeholder
*/
.group input:focus::placeholder {
color: transparent;
}
<div class="group">
<input type="text" id="id1" placeholder="Description">
<label for="id1">Description</label>
</div>
答案 2 :(得分:1)
如果出于兼容性原因无法使用css(using @Darlesson's answer)进行此操作,则可以使用javascript作为以下代码段进行此操作。
诀窍是存储旧的占位符,以便在需要还原时可以使用它。在这种情况下,我使用了一个新属性data-placeholder
,其中存储了当前值并清除了真实的placeholder
属性。最后,当元素失去焦点时,您可以获取属性data-placeholder
并使用其重置真实的placeholder
值。
var myInputLabel = document.getElementById('myInputLabel');
var myInput = document.getElementById('myInput');
// when element gets focused
myInput.addEventListener('focus', function (e) {
// save current placeholder
myInput.setAttribute('data-placeholder', myInput.getAttribute('placeholder'));
// clear current placeholder
myInput.setAttribute('placeholder', '');
// show label
myInputLabel.style.display = 'inline';
});
// when element gets blured
myInput.addEventListener('blur', function (e) {
// restore the placeholder stored on data-placeholder
myInput.setAttribute('placeholder', myInput.getAttribute('data-placeholder'));
// hide label
myInputLabel.style.display = 'none';
});
<form>
<label id="myInputLabel" style="display: none;">Name</label><br>
<input type="text" id="myInput" placeholder="Name">
</form>
答案 3 :(得分:0)
var input = document.getElementById("box");
var label = document.getElementById("first");
// When the user clicks on the input element
input.addEventListener("focus", function() {
// Make label visible
first.style.visibility = "visible";
// Remvoe placeholder
input.placeholder = "";
});
// When the user clicks away
input.addEventListener("focusout", function() {
// Check if he did not typed anything
if (input.value === "") {
// Restore placeholder value and hide label
input.placeholder = "First Name";
first.style.visibility = "hidden";
}
});
#first{
visibility: hidden;
}
<!doctype html>
<html>
<head>
<meta charset="utf-8"/>
<title>
Functions
</title>
<style>
#first{
visibility: hidden;
}
</style>
</head>
<body>
<form>
<label id="first" >First Name</label><br/>
<input id="box" type="text" placeholder="First Name" />
</form>
</body>
</html>