【问题标题】:jQuery not affecting the right itemjQuery不影响正确的项目
【发布时间】:2013-03-19 02:04:22
【问题描述】:

我有一个表格,可以在这里查看:http://dev.calgunsfoundation.org/get-help/hotline/

还有,我有一些 jQuery:

<script type="text/javascript">
      jQuery(document).ready(function() {

          jQuery('.ginput_container label').each(function(i,e){
              fielddesc = jQuery('<div>').append(jQuery(e).clone()).remove().html();
              jQuery(e).siblings('.ginput_container input:email').before(fielddesc);
              jQuery(e).siblings('.ginput_container input:text').before(fielddesc); //moves sub label above input fields
              jQuery(e).siblings('.ginput_container select').before(fielddesc); //moves sub label above select fields (e.g. country drop-down)
              jQuery(e).siblings('.ginput_container .gfield_radio input').after(fielddesc); //keep label above radio buttons
              jQuery(e).siblings('.ginput_container .gfield_checkbox input').after(fielddesc);
              jQuery(e).remove();
          });

      });
    </script>

问题在于这一行:

jQuery(e).siblings('.ginput_container input:email').before(fielddesc);

似乎根本不起作用。

(目前已在网站本身上注释掉。)

当我启用该行时,表单不显示。当我禁用它时,一切正常(但是,当然“输入电子邮件”和“确认电子邮件”标签没有正确显示。

这里显示了 jQuery 未运行时的代码:

<li id="field_3_3" class="gfield gfield_contains_required">
    <label class="gfield_label" for="input_3_3">
        Email
            <span class="gfield_required">
                *
            </span>
    </label>
    <div class="ginput_complex ginput_container" id="input_3_3_container">
        <span id="input_3_3_1_container" class="ginput_left">
            <input type="email" name="input_3" id="input_3_3" value="" tabindex="17">
                <label for="input_3_3">
                    Enter Email
                </label>
        </span>
        <span id="input_3_3_2_container" class="ginput_right">
            <input type="email" name="input_3_2" id="input_3_3_2" value="" tabindex="18">
                <label for="input_3_3_2">
                    Confirm Email
                </label>
        </span>
    </div>
</li>

似乎我的目标是正确的,我想要输入:电子邮件并将当前位于输入下方的标签移动到现在位于输入上方。但是,显然我做错了什么。

【问题讨论】:

  • nitpick,e 通常用于事件对象,使您的代码混乱。
  • 对不起。我很讨厌 jQuery。 :(
  • 就像@epascarello 说的那样,这是一个吹毛求疵的选择,但当您了解更多有关 jQuery 的信息时一定要记住它。像 jQuery 一样简单,但要完全理解它仍然需要时间。

标签: javascript jquery wordpress forms


【解决方案1】:

:email 不是有效的 :selector - 这是问题的根源 jQuery(e).siblings('.ginput_container input:email')

您可以使用 id 选择器代替这两个输入:

jQuery(e).siblings('#input_3_3, #input_3_3_2')`

或通用:

jQuery(e).siblings('input[type=email]') 

文本/电子邮件通用:

jQuery(e).siblings('input[type=email], input[type=text]') 

【讨论】:

  • 当我更改它时,页面根本无法加载。
  • 他没有选择它。他正在围绕内存中的 div 创建一个 jQuery 包装器
  • 基本上,我希望电子邮件标签“输入电子邮件”和“确认电子邮件”显示在输入框上方而不是下方。
  • 更新了上面的小提琴以反映您的更改。您在上面使用 before() 时处于正确的轨道上,但如果您提供元素,则无需删除原始对象 before() 移动 dom 中的对象。
  • :email 不是一个有效的选择器 - 选择器的完整列表在这里:api.jquery.com/category/selectors - 如果你想跳过 id 并且更通用,你可以这样做:$('input[type=email]') 如果你'希望首先做到这一点电子邮件 + 文本:$('input[type=email], input[type=text]')
猜你喜欢
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 2012-02-24
  • 2016-10-07
  • 1970-01-01
  • 2011-04-21
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多