我想创建一个文本框,就像HTML,JS中附加的图像一样。请分享一些想法。
在图片中你可以看到3个案例
热门 - 成功案例
中间 - 电话号码为空时默认文本框显示占位符PHONE NUMBER
当用户输入电话号码时,底部占位符显示在顶部
答案 0 :(得分:1)
是的,你可以,你需要JQuery来做到这一点......
var placeholder = 'This is a line \nthis should be a new line';
$('textarea').attr('value', placeholder);
$('textarea').focus(function(){
if($(this).val() === placeholder){
$(this).attr('value', '');
}
});
$('textarea').blur(function(){
if($(this).val() ===''){
$(this).attr('value', placeholder);
}
});
textarea{
width:300px;
height:100px;
color:gray;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<textarea></textarea>
<textarea></textarea>
答案 1 :(得分:0)
我有一个例子可以帮助您理解您提出的这个问题。
<强> HTML 强>
<body ng-app>
<label for="pN">Phone number:</label>
<input id="pN" type="text" value="1-800-CALL-MOM"></input>
<div style="height: 10px; border-bottom: 1px dotted silver;margin-bottom: 10px;"></div>
<div class="wrapper">PhoneNumberToDisplay: <div id="out1"></div></div>
<div class="wrapper">Letters Converted: <div id="out2"></div></div>
<div class="wrapper">PhoneNumberToDial: <div id="out3"></div></div>
<div id="out4"></div>
<div id="out3"></div>
</body>
<强> CSS 强>
* { font-family: sans-serif; padding: 4px; }
#out1,#out2,#out3 { color: #999; display: inline-block;}
#out1 {
font-weight: bold;
}
<强>的JavaScript 强>
var phoneLetterToDigit = ['2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9'];
var raw = '';
var digitsReplaced = '';
var numbersOnly = '';
$('#pN').keyup(function () {
update();
});
function update() {
raw = $("#pN").val();
digitsReplaced = '';
$.each(raw.split(''), function(a,b) {
var l = b.toUpperCase().charCodeAt(0) - 65;
if (l >= 0 && l <= 25) {
digitsReplaced += phoneLetterToDigit[l];
}
else {
digitsReplaced += b;
}
});
numbersOnly = digitsReplaced.replace(/[^0-9.]/g,'');
$("#out1").html(raw);
$("#out2").html(digitsReplaced);
$("#out3").html(numbersOnly);
}
update();
您可以在此处查看此行为:
答案 2 :(得分:0)
我想再次尝试帮助您使用其他代码示例。
<强> HTML 强>
<h1>Phone field scrubbing utility</h1>
<ul>
<li>Enter any content (characters, puntuation, etc.)</li>
<li>As long as there are 10 digits it will validate true</li>
<li>Providing the first digit is not 0 or 1</li>
<li>And providing there is not 1 digit repeated 10 times</li>
<li>The "format it" button will do just that</li>
<li>The "submit it" button will strip out everything but digits</li>
</ul>
<input class="phone" id="phone1" value="XXXXXXXXXX"><br>
<input class="phone" id="phone1" value="XXXXXXXXXX"><br>
<input class="phone" id="phone1" value="XXXXXXXXXX"><br>
<input type="button" id="format" value="format it">
<input type="button" id="submit" value="submit it">
<强> CSS 强>
body{
font-family: Arial, sans-serif;
margin: 25px;
}
input{
font-size: xx-large;
border: 2px solid #555;
margin: 10px;
padding: 10px;
}
.on{
border: 2px dashed #555;
/* background: rgba(255, 215, 0,.15);
color: rgb(255, 215, 0);*/
}
.goodClass{
/*border: 1px solid rgb(0, 255, 0);*/
background: rgba(0, 255, 0, .15);
color: rgb(0, 255, 0);
}
.badClass{
/*border: 1px solid rgb(255, 0, 0);*/
background: rgba(255, 0, 0,.15);
color: rgb(255, 0, 0);
}
<强>的JavaScript 强>
$(function(){
$('#phone1').phoneScrubber({
focusClass: 'on',
goodClass: 'goodClass',
badClass: 'badClass',
testOnKeyup: true
});
$.fn.phoneScrubber.formatAll();
$('#format').click(function(){
$.fn.phoneScrubber.formatAll();
});
$('#submit').click(function(){
if($.fn.phoneScrubber.validateAll()){
$.fn.phoneScrubber.submitAll();
}
});
});
(function($) {
$.fn.phoneScrubber = function(opts) {
var
obj = this,
defaults = {
phoneCleaner : /\D/g
, repeated : /(.)\1{9,}/g
, minLen : 10
, omit : [0, 1]
, format : '() -'
, focusClass : null
, testOnKeyup : true
, goodClass : null
, badClass : null
, formatOnBlur : false
}, settings = $.extend({}, defaults, opts)
, testStr
, aFormat = settings.format.split('')
, pre1 = aFormat[0]
, pre2 = aFormat[1] + aFormat[2]
, sep = aFormat[3]
, message = ''
, part1 = ''
, part2 = ''
, part3 = ''
, returnVal = ''
, setVal
, test
, cleanIt
, formatNumber
, cleanNumber
, errCount = 0
, errs = []
;
return this.each(function() {
test = function(dirty) {
var test = dirty.replace(settings.phoneCleaner,'')
, testLen = test.length
, startChar = parseInt(test.substring(0,1))
, testStr = test.substring(0,10)
if(testLen < settings.minLen){
// message = 'invalid length: '+testLen;
// alert(message);
return false;
}
if(settings.omit.indexOf(startChar)!==-1){
// message = 'First character cannot be '+startChar;
// alert(message);
return false;
}
if(testStr.match(settings.repeated)){
// message = "Nice try... repeated characters";
// alert(message);
return false;
}
return true;
}
cleanIt = function(dirty){
return dirty.replace(settings.phoneCleaner,'');
}
$.fn.phoneScrubber.formatNumber = function(dirty) {
var clean = cleanIt(dirty);
clean = clean.substring(0, settings.minLen)
part1 = clean.substring(0,3);
part2 = clean.substring(3,6);
part3 = clean.substring(6,10);
returnVal = pre1+part1+pre2+part2+sep+part3;
return returnVal;
}
$.fn.phoneScrubber.cleanNumber = function(dirty) {
var clean = cleanIt(dirty);
clean = clean.substring(0, settings.minLen)
return clean;
}
$.fn.phoneScrubber.formatAll = function(){
obj.each(function(){
var $this = $(this);
if(test($this.val())){
$this.val($.fn.phoneScrubber.formatNumber($this.val()));
}
});
}
$.fn.phoneScrubber.validateAll = function(){
var returnVal = true;
errs = [];
obj.each(function(){
if (test($(this).val())==false){
returnVal = false;
errs.push(this);
}
});
return returnVal;
}
$.fn.phoneScrubber.getErrFields = function(){
return errs;
}
$.fn.phoneScrubber.submitAll = function(){
obj.each(function(){
var $this = $(this);
if(test($this.val())){
$this.val($.fn.phoneScrubber.cleanNumber($this.val()));
}
});
}
obj.focus(function() {
$(this).addClass(settings.focusClass);
})
.keyup(function() {
var $this = $(this);
if(settings.testOnKeyup){
if(test($this.val())){
// good
$this
.removeClass(settings.badClass)
.addClass(settings.goodClass);
}else{
// bad
$this
.removeClass(settings.goodClass)
.addClass(settings.badClass);
}
}
})
.blur(function() {
var $this = $(this);
$this.removeClass(settings.focusClass);
if(test($this.val())){
if(settings.formatOnBlur){
$this.val(formatNumber($this.val()));
}
}
});
});
}
})(jQuery);
源代码:JSFIDDLE
答案 3 :(得分:0)
我希望最终帮助你。
<强> HTML 强>
<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>
<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>
<textarea class='autoExpand' rows='3' data-min-rows='3' placeholder='Auto-Expanding Textarea'></textarea>
<强> CSS 强>
body{ background:#728EB2; }
textarea{
display:block;
box-sizing: padding-box;
overflow:hidden;
padding:10px;
width:250px;
font-size:14px;
margin:50px auto;
border-radius:8px;
border:6px solid #556677;
}
<强>的JavaScript 强>
$(document)
.one('focus.textarea', '.autoExpand', function(){
var savedValue = this.value;
this.value = '';
this.baseScrollHeight = this.scrollHeight;
this.value = savedValue;
})
.on('input.textarea', '.autoExpand', function(){
var minRows = this.getAttribute('data-min-rows')|0,
rows;
this.rows = minRows;
console.log(this.scrollHeight , this.baseScrollHeight);
rows = Math.ceil((this.scrollHeight - this.baseScrollHeight) / 17);
this.rows = minRows + rows;
});
这次我试着像你说的那样做。
源代码:JSFIDDLE