所以我正在尝试创建一个函数,在字段中设置/删除水印,我已经得到了这个,输入的html元素看起来像这样:
<input type="text" name="pollName" id="pollName" value="DD-MM-YYYY" onfocus="javascript: watermark(this,true,'DD-MM-YYYY')" onblur="javascript: watermark(this,false,'DD-MM-YYYY')" >
然而这很痛苦,我正在尝试将代码移动到javascript,我打算使用此代码:
function watermark(dom,isFocus,watermark)
{
if(isFocus)
{
if(dom.value === watermark)
{
dom.value = "";
}
}
else if(!isFocus)
{
if(dom.value === '')
{
dom.value = watermark;
}
}
}
document.ready(function(){
$('#addOption').click(addOption);
$('.dateSelector').focusin(watermark(this,1,'DD-MM-YYYY'));
$('.dateSelector').focusout(watermark(this,0,'DD-MM-YYYY'));
});
这是有问题的HTML。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>SPS: Create a new poll</title>
<link href="styles/stylePollCreator.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript" src="js/jsPollCretor.js"></script>
</head>
<body>
<div id="pollSetup">
<form action="" method="post">
<label for="pollName:">Poll name</label>
<input type="text" name="pollName" id="pollName" />
<br />
<label for="startDate">Start date: </label>
<br />
<input type="text" id="startDate" name="startDate" class="dateSelector" value="DD-MM-YYYY"/>
<label for="endDate">End date: </label>
<input type="text" id="endDate" name="endDate" class="dateSelector" value="DD-MM-YYYY"/>
<br />
<div id="pollOptions">
</div>
<input id="submitNewPoll" value="Create poll" type="submit" />
</form>
<button id="addOption">Add option</button>
</div>
</body>
</html>
addOption函数工作正常,但水印功能似乎在网站首次加载时调用一次,然后不再:/
感谢你的时间:)
答案 0 :(得分:1)
focusin
和focusout
期望参数的函数,并且您在技术上传递undefined
,因为水印没有返回任何内容。换句话说,您传递watermark
的结果,而不是watermark
本身。
所以,你想这样做:
$('.dateSelector').focusin(function(){watermark(this,1,'DD-MM-YYYY')});
编辑:
我同意上面的评论,您应该使用占位符属性。所以,你的输入看起来像这样:
<input type="text" name="pollName" id="pollName" placeholder="DD-MM-YYYY">
请注意,这是一个HTML5属性,因此对于旧浏览器,您必须使用填充,但如果您google placeholder polyfill,您将找到可以使用的一百万个填充。
答案 1 :(得分:0)
然而,当网站首次加载时,水印功能似乎会调用一次
是的,这就是你正在做的事情
$('.dateSelector').focusin(watermark(this,1,'DD-MM-YYYY'));
$('.dateSelector').focusout(watermark(this,0,'DD-MM-YYYY'));
相当于
watermark(this,1,'DD-MM-YYYY');
$('.dateSelector').focusin(undefined);
watermark(this,0,'DD-MM-YYYY');
$('.dateSelector').focusout(undefined);
将函数传递给事件注册:
$('.dateSelector').focusin(function(e) {
watermark(this,1,'DD-MM-YYYY');
}).focusout(function(e) {
watermark(this,0,'DD-MM-YYYY');
});
但是,正如@MattBall已经评论过的那样,如果您需要支持旧浏览器,则应该使用placeholder
属性并使用现有库进行填充:
<input type="text" name="pollName" id="pollName" placeholder="DD-MM-YYYY">