我正在尝试编写一个模拟占位符的简单脚本,以便我可以在所有浏览器上使用该效果.我设置的是一个带有跨度的表单,其中包含一些文本,我绝对定位于输入.这类似于占位符文本.
现在Jquery很容易,如果我为每个输入元素写出单独的函数,我可以使它工作正常,但这有点多余.我想要做的是使用each()和children()以及类,以便我可以将它应用于我想要的任何形式.这是代码:
<form id="signupForm" name="signupForm"> <span class="inputSpan"> <input value="" class="input" name="fistName" id="firstName" type="text" /> <span class="inputText" id="inputText">First name</span> </span> <span class="inputSpan"> <input value="" class="input" name="lastName" id="lastName" type="text" /> <span class="inputText" id="inputText">Last name</span> </span> </form> <script type="text/javascript"> $('.inputSpan').each(function() { $(this).children('.inputText').click(function(index) { $(this).children('.inputText').hide(); $(this).children('.input').focus(); }); }); </script>
如果我在每个函数中放置一个警告语句,它可以正常工作,但它没有执行其余部分,即隐藏子类’.inputText’并专注于另一个子’.input’我猜它有什么东西一旦在函数内部再次调用$(this)就无法做到.任何人对如何让这个工作有任何想法?
解决了!!!谢谢马特
这是最终的工作代码,如果输入留空,则可以将占位符文本放回原位.
<script type="text/javascript"> $('.inputSpan').each(function() { var $input = $(this) $(this).children('.inputText').click(function(index) { $input.children('.inputText').hide(); $input.children('.input').focus(); }); $(this).children('.input').focusout( function() { if ($input.children('.input').attr('value') == '') { $input.children('.inputText').show(); } }); }); </script>
解决方法
未经测试,但我相信你有一个与$(this)相关的范围问题
$('.inputSpan').each(function() { var $input = $(this) $(this).children('.inputText').click(function(index) { //within this click handler,$(this) refers to the the '.inputText' not '.inputSpan' $input.children('.inputText').hide(); $input.children('.input').focus(); }); });