我有一个动态表单,并且每当焦点位于特定字段上时,标签文本在字段上方移动并在输入值时停留在那里。这适用于名称和消息字段。我的问题是电话或电子邮件的联系方式。该字段基于所选的首选联系方式显示。但是,当输入值时,在该字段失去焦点后,文本回落并重叠用户输入的内容。就选择元素而言,我尝试了一堆不同的东西,但无法让这些领域合作。我一直无法为这个特定问题找到任何东西。这是一个表格的小提琴:JS Fiddle和下面的代码片段。jQuery如果输入字段有值,添加类
$('input').blur(function(event) {
var inputValue = this.value;
if (inputValue) {
this.classList.add('value-exists');
} else {
this.classList.remove('value-exists');
}
});
$('input:radio[name=contact]').on('click', function(e) {
var value = $('input:radio[name=contact]:checked').val();
if (value === 'Phone') {
$('#contact-method').html('<input type="phone" name="phone" /><div class="label-text">Phone</div>').show('600');
} else if (value === 'Email') {
$('#contact-method').html('<input type="email" name="email" /><div class="label-text">Email</div>').show('600');
}
});
form {
font-family: 'PT Sans', sans-serif;
}
label {
display: block;
padding-top: 10px;
}
label .label-text {
cursor: text;
-moz-transform: translateY(-22px);
-ms-transform: translateY(-22px);
-webkit-transform: translateY(-22px);
transform: translateY(-22px);
transition: all 0.3s;
}
label input {
background-color: transparent;
border: 0;
border-bottom: solid #777 2px;
transition: all .03s;
}
label input:focus+.label-text {
color: 'black';
text-transform: uppercase;
transform: translateY(-55px);
}
label input.value-exists+.label-text {
color: 'black';
text-transform: uppercase;
transform: translateY(-55px);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<form class="form" method="post" action="">
<label>
<input type="text" name="name" />
<div class="label-text">Name</div>
</label>
<br />
<label>
<input type="text" name="message" />
<div class="label-text">Message</div>
</label>
<br />
<p>How would you prefer to be contacted?</p>
<label>
<input class="contact" type="radio" name="contact" value="Email" /> Email
<input class="contact" type="radio" name="contact" value="Phone" /> Phone
</label>
<br />
<label id="contact-method">
</label>
<br />
<br />
<button>Submit</button>
</form>
</div>
这是一个设计问题,不仅仅是一种编程问题的更多。如果“电子邮件”和“电话”输入在页面上共享相同的房地产,那么您需要提出一个不允许标签与输入重叠的设计解决方案。 –