【问题标题】:Jquery: React to dynamic classes in formsJquery:对表单中的动态类做出反应
【发布时间】:2013-07-17 17:41:43
【问题描述】:

我制作了一个 HTML 表单,它被分成多个部分。

我正在使用 Jquery 为 body 元素添加类,具体取决于已填写的部分。

默认情况下,body 有一个purchase-stop 类。填写完所有部分后,将变为purchase-go

当用户点击提交按钮时,我使用以下代码显示一条消息:

$("input").on('click', '.purchase-stop', function()
{
    alert("You haven't visited all sections. Please visit them all to ensure you are happy with the choices");
});

问题是即使purchase-stop 已更改为purchase-go,也会显示。

我怎样才能让它只在课程为purchase-stop 时显示?

此外,表单上的两个字段是必填字段。我使用以下代码检查这些必填部分是否填写:

$(".changing-room").submit(function(e)
    {
        e.preventDefault();

        var isFormValid = true;
        $("input.required").each(function()
        {
            if ($.trim($(this).val()).length === 0)
            {
                $(this).parent().addClass("error");

                isFormValid = false;
            }
            else
            {
                $(this).parent().removeClass("error");
            }
        });
        if (!isFormValid)
        {
            alert("Some fields are blank (highlighted in red). Please fill them in");
            $('input').blur();
        }

        if (isFormValid)
        {
            $('body').addClass('purchase-active');
            window.scrollTo(0, 0);
        }
        return isFormValid;

    });

但同样,我只希望它在 body 类设置为 purchase-go(而不是 purchase stop)时运行。

根据 Jquery 文档,我必须让 Jquery 在动态类上运行(因为 purchase-go 不在加载的 HTML 中)。为此,我必须使用On() function。 on函数组成如下:

.on("action [e.g. click]", "[trigger element]", function(event)

但是,我已经指定了一个触发元素,但它不起作用。

【问题讨论】:

  • 只有在将 body 的类更改为 purchase-go 后才调用您的单击处理程序

标签: jquery html forms dynamic-class


【解决方案1】:

on() 不像你想的那样工作。

$("[source].on("[action]", "[trigger element]", function(event)

当您使用on 时,您将绑定到source 元素,并且当action 发生在source 内的trigger element 上时会触发该事件。

因此,在您的情况下,您正在设置一个单击处理程序以在具有 purchase-stop这是任何input 的后代 的元素是clicked 时触发。

你需要做这样的事情:

$('input[type="submit"]').click(function(e) {
    if ($('body').hasClass('purchase-stop')) {
        alert("You haven't visited all sections. Please visit them all to ensure you are happy with the choices");
    }
});

不过,在正文中使用类名来指示表单是否有效有点奇怪。您可以将该功能添加到您的验证功能中。

【讨论】:

  • 这很好用,但是我如何才能让代码检查强制部分,以便仅在 purchase-go 附加到 body 类时触发。我尝试将它包装在 If .hasClass 语句中,但它不起作用。我使用 body 类的原因是因为 CSS 会随着不同设备的不同样式而变化。
  • 你是说当 body 有正确的类时你只想在 $(".changing-room").submit() 块中进行验证?
  • 是的。感谢您的帮助!
  • 对类的检查需要点击处理程序中。
  • 好吧,您可能需要preventDefault 或以任何一种方式返回一些东西。此外,在您的小提琴中,您似乎还有一些额外的问题。在您的 html 中,您的表单位于 changing-room article 之外,因此 $(".changing-room form") 不会选择任何内容。这可能是你最大的问题。
猜你喜欢
  • 2016-10-02
  • 2020-05-18
  • 2016-04-14
  • 2020-04-27
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多