JavaScript:element.setAttribute(attribute,value),element.attribute = value和element。[attribute] = value不会更改属性值

时间:2018-08-01 17:40:15

标签: javascript html css setattribute

我的任务是在用户单击输入框时从输入框中删除占位符,并使标签可见。 如果用户没有再次填充任何内容,请放回占位符,并使标签不可见。

我可以隐藏它,但不能重新分配它。 我已经尝试了element.setAttribute(attribute,value),element.attribute = value和element。[attribute] = value类型,但是不起作用。

我保留了visibility <label>的默认"hidden"

我为任务创建了hide()和show()函数,它们都具有2个参数。

  1. 输入框的id
  2. 标签ID

代码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;

合作

4 个答案:

答案 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>