2012-03-03 56 views
1

我有“contenteditable”div元素。我想为它设置水印,以便当用户尝试在div中写入某些内容时,水印应该消失。Watermark for contenteditable div元素

我尝试了一些水印jQuery插件,所有的工作输入,textarea。为contenteditable div实现此功能的方式是什么?

回答

3

如果通过“水印”的意思是像一个占位符的效果,这个概念应该是相当简单:

var mark = 'Watermark', 
    edited = false; 

$('[contenteditable]').focus(function() { 
    if(!edited) { 
     $(this).empty(); 
    } 
}).blur(function() { 
    if(!$(this).html()) { 
     $(this).html(mark); 
    } 
}).keyup(function() { 
    edited = true; 
}).text(mark); 

演示:http://jsfiddle.net/jjxvR/1/

+0

很爽。但是有一个问题,如果一个用户使用“mark”编写相同的文本,那么这是一个问题。 – Abhishek 2012-03-03 22:00:11

+1

您可以添加一个键盘标志,请参阅我的编辑。这只是概念上的,您可能需要进一步测试以确保您的应用程序安全。 – David 2012-03-03 22:15:32

+1

我的DIV元素是自动对焦的。改变你的密码位 '$('[contenteditable]')。bind(“focus keydown”,function(){ ... //同您的代码 ' – Abhishek 2012-03-03 22:28:10

1

这里是我的回答另一个问题:

它采用了jQuery和CSS3的结合。 与html5占位符属性完全相同!

  • 隐藏自己的时候了,当你输入第一个字母
  • 再次表明自己当你删除你输入到它

HTML:

<div class="placeholder" contenteditable="true"></div> 

CSS3:

.placeholder:after { 
    content: "Your placeholder"; /* this is where you assign the place holder */ 
    position: absolute; 
    top: 10px; 
    color: #a9a9a9; 
} 

的jQuery:

$('.placeholder').on('input', function(){ 
    if ($(this).text().length > 0) { 
     $(this).removeClass('placeholder'); 
    } else { 
     $(this).addClass('placeholder'); 
    } 
}); 

DEMO:http://jsfiddle.net/Tomer123/D78X7/