使用Jquery each()和children()来遍历和隐藏/聚焦表单元素

前端之家收集整理的这篇文章主要介绍了使用Jquery each()和children()来遍历和隐藏/聚焦表单元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试编写一个模拟占位符的简单脚本,以便我可以在所有浏览器上使用该效果.我设置的是一个带有跨度的表单,其中包含一些文本,我绝对定位于输入.这类似于占位符文本.

现在Jquery很容易,如果我为每个输入元素写出单独的函数,我可以使它工作正常,但这有点多余.我想要做的是使用each()和children()以及类,以便我可以将它应用于我想要的任何形式.这是代码

  1. <form id="signupForm" name="signupForm">
  2. <span class="inputSpan">
  3. <input value="" class="input" name="fistName" id="firstName" type="text" />
  4. <span class="inputText" id="inputText">First name</span>
  5. </span>
  6. <span class="inputSpan">
  7. <input value="" class="input" name="lastName" id="lastName" type="text" />
  8. <span class="inputText" id="inputText">Last name</span>
  9. </span>
  10. </form>
  11.  
  12. <script type="text/javascript">
  13. $('.inputSpan').each(function() {
  14. $(this).children('.inputText').click(function(index) {
  15. $(this).children('.inputText').hide();
  16. $(this).children('.input').focus();
  17. });
  18. });
  19. </script>

如果我在每个函数中放置一个警告语句,它可以正常工作,但它没有执行其余部分,即隐藏子类’.inputText’并专注于另一个子’.input’我猜它有什么东西一旦在函数内部再次调用$(this)就无法做到.任何人对如何让这个工作有任何想法?

解决了!!!谢谢马特
这是最终的工作代码,如果输入留空,则可以将占位符文本放回原位.

  1. <script type="text/javascript">
  2. $('.inputSpan').each(function() {
  3. var $input = $(this)
  4.  
  5. $(this).children('.inputText').click(function(index) {
  6. $input.children('.inputText').hide();
  7. $input.children('.input').focus();
  8. });
  9. $(this).children('.input').focusout( function() {
  10. if ($input.children('.input').attr('value') == '') {
  11. $input.children('.inputText').show();
  12. }
  13. });
  14. });
  15. </script>

解决方法

未经测试,但我相信你有一个与$(this)相关的范围问题
  1. $('.inputSpan').each(function() {
  2. var $input = $(this)
  3.  
  4. $(this).children('.inputText').click(function(index) {
  5. //within this click handler,$(this) refers to the the '.inputText' not '.inputSpan'
  6. $input.children('.inputText').hide();
  7. $input.children('.input').focus();
  8. });
  9. });

猜你在找的jQuery相关文章