【问题标题】:Jquery cookie plugin - set cookie when user submits formJquery cookie 插件 - 在用户提交表单时设置 cookie
【发布时间】:2011-02-13 06:25:55
【问题描述】:

我想在用户提交表单时设置一个 cookie。

我正在使用一些遗留代码,这些代码根据用户选中复选框来设置 cookie,但希望这样可以在用户提交表单时简单地设置 cookie。

这是我所拥有的,在选中复选框时有效:

$().ready(function()
{
    $('.application-form').submit(function(e)
    {
        e.preventDefault();

        if ($('.application-form input[name=marketing]').is(':checked'))
        {
            $.cookie('agreed_to_terms', '1', { path: '/', expires: 999999 });
        }
    });
});

这很好用,但我不希望在检查“营销”输入时设置 cookie,而只是在表单提交时设置。像这样:

$().ready(function()
{
    $('.application-form').submit(function(e)
    {
        e.preventDefault();

        if ($('.application-form').submit();)
        {
            $.cookie('agreed_to_terms', '1', { path: '/', expires: 999999 });
        }
    });
});

但是,这并没有成功设置 cookie,任何想法都会很棒,谢谢。

【问题讨论】:

    标签: jquery forms cookies


    【解决方案1】:

    if条件下不需要检查提交返回值。

    $().ready(function()
    {
        $('.application-form').submit(function(e)
        {
            e.preventDefault();
    
            $.cookie('agreed_to_terms', '1', { path: '/', expires: 999999 });
        });
    });
    

    【讨论】:

    • 谢谢你,这可行,但突出了我现在正在考虑的其他一些问题(见上文)。
    【解决方案2】:
    $(document).ready(function() {
      $('.application-form').submit(function(e) {
        e.preventDefault();
        $.cookie('agreed_to_terms', '1', { path: '/', expires: 999999 });
      });
    });
    

    您不需要那里的 if 条件,因为它似乎在测试表单是否已提交,并且您已经知道它已提交,因为您在表单的提交事件处理程序中。

    【讨论】:

    • 太棒了。这成功设置了 cookie 并提交了表单,但是,页面不会重新加载,也不会转到它的“谢谢”页面,而当我使用以前的方法设置 cookie 时,就会发生这种情况。该页面似乎什么也没做,即使它设置了 cookie,提交到数据库并发送电子邮件 - 它可以工作,但似乎有些东西连接到我设置 cookie 的 .submit() ,这会影响方式表单在提交后表现,有什么想法吗?谢谢
    • 我有点困惑。设置 cookie 后,是否希望表单正常提交到其“action”属性中指定的页面?是否删除“e.preventDefault();”有什么不同吗?
    • 是的,我希望它能够正常提交。删除“e.preventDefault();”使表格按我的意愿行事,非常感谢。抱歉,但正如我所说,这是遗留代码,我并不完全知道什么是“e.preventDefault();”确实——我不是真的——它是否像它的名字所暗示的那样?阻止浏览器默认行为的发生,在这种情况下,表单提交?谢谢。
    • 是的,“e.preventDefault();”阻止浏览器执行默认操作,在这种情况下,即提交表单。来自 jQuery 文档:“如果调用此方法,则不会触发事件的默认操作”。顺便说一句,如果这是正确的答案,将不胜感激并接受回答,这样,其他遇到相同(或类似)问题的人将能够找到正确的答案。
    • 非常感谢,这很有帮助。我已经接受了答案,但我需要 15 名声望才能投票 - 我是新手。
    猜你喜欢
    • 2020-07-20
    • 2015-08-09
    • 2012-08-02
    • 1970-01-01
    • 2015-07-26
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多