【问题标题】:Rails helpers causing input placeholder to not workRails 助手导致输入占位符不起作用
【发布时间】:2011-09-22 21:49:34
【问题描述】:

我的应用程序中有一些 jQuery,它根据输入字段中是否存在输入来删除/显示占位符。如下:

$(document).ready(function() {
    $('input').keyup(function() {
        if ($(this).val().length) {
            $('label[for='+$(this).attr('name')+']').hide();
        } else {
            $('label[for='+$(this).attr('name')+']').show();
        }
    });
});

但是,由于我的 labeltext_field 表单助手,这不起作用。下面的 HTML 是 jQuery 的工作方式:

<label for="user_email">Email</label>
<input id="user_email" name="user_email" size="38" type="text" />

这是使用帮助器渲染的 HTML:

<label for="user_email">Email</label>
<input id="user_email" name="user[email]" size="38" type="text" />

如您所见,帮助程序使label forinput id 的HTML 与input name 的HTML 不匹配。谁能帮我解决这个问题?

【问题讨论】:

  • 标签 id 和 name 在我看来是正确的,基于 Rails 通常如何生成它们。为什么不改变你的 Jquery 方面呢?

标签: jquery ruby-on-rails-3


【解决方案1】:

如果属性值中有特殊字符(如[]),则只需将值括在引号中即可。 IE。而不是选择器label[for=user[email]](已损坏)使用label[for="user[email]"]。您的代码中的等效更改是:

$(document).ready(function() {
  $('input').keyup(function() {
    if ($(this).val().length) {
      $('label[for="' + $(this).attr('name') + '"]').hide();
    } else {
      $('label[for="' + $(this).attr('name') + '"]').show();
    }
  });
});

【讨论】:

  • 不幸的是,这不起作用。不知道为什么,所以我最终可能会做一个 span 类作为占位符。
【解决方案2】:

我意识到这并不能回答 rails 的问题,但如果您正在考虑在 jQuery 端使用不同的代码:

不久前,我为占位符编写了一个 jQuery 插件。它在文本上执行 3 种颜色状态(占位符模糊、占位符聚焦、用户输入)、自定义占位符文本,以及一些用于验证和表单提交的方法(即占位符是否处于活动状态,或者是用户输入)。它还为您提供了一个 CSS 挂钩。或许有帮助?

Project Home

语法明智,您只需将其附加到文本字段或 div 并指定占位符文本。文档中提供的示例。

【讨论】:

  • 很酷的插件。解决 Rails 问题后,我会检查一下!
猜你喜欢
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2016-04-24
  • 2023-04-08
相关资源
最近更新 更多