【发布时间】:2017-06-16 00:01:09
【问题描述】:
我有一个动态表单,每次焦点位于特定字段时,标签文本都会移动到该字段上方并在输入值时停留在那里。这适用于 Name 和 Message 字段。我的问题是电话或电子邮件的联系方式。该字段根据选择的首选联系方式显示。但是当输入一个值时,在该字段失去焦点后,文本会返回并与用户输入的内容重叠。就选择元素而言,我尝试了很多不同的方法,但无法让这些领域合作。对于这个特定问题,我找不到任何东西。这是一个 Fiddle 形式:JS Fiddle 和下面的 sn-p。
$('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>
【问题讨论】:
-
这是一个设计问题,而不是编程问题。如果“电子邮件”和“电话”输入要在页面上共享相同的不动产,那么您需要提出一个不允许标签与输入重叠的设计解决方案。
标签: javascript jquery html css