【问题标题】:insert values of several cookies into hidden form field将几个 cookie 的值插入隐藏的表单字段
【发布时间】:2018-07-11 08:15:58
【问题描述】:

我有一个简单的表单,需要将 cookie 的值插入到表单中的中间字段(优惠券)中。

我有这个表格:

<form action="/members/signup" class="am-signup-form" id="page-0" method="post" name="page-0">
<input id="_qf_page-0_next-0" name="_qf_page-0_next" type="submit" value="Get Access Now">
<input type="hidden" name="coupon" id="coupon-0" value="" />
</form>

我在表单下方插入了这个 javascript:

<script type="text/javascript">
(function(){
    var cookies;

    function readCookie(name,c,C,i){
        if(cookies){ return cookies[name]; }

        c = document.cookie.split('; ');
        cookies = {};

        for(i=c.length-1; i>=0; i--){
           C = c[i].split('=');
           cookies[C[0]] = C[1];
        }

        return cookies[name];
    }

    window.readCookie = readCookie; 
})();

$(document).ready(function(){
    //Get cookie you want.
    var referrer = window.readCookie('readCookie_mycookiename1') || ''; 
    //Set cookie value to hidden field.        
    $('#coupon').val(referrer);
});
</script>

我似乎无法让表单/脚本正常工作。 cookie 值未插入到隐藏字段的值中。

另外,我需要将 3 个不同的 cookie 插入到隐藏字段的值中。可能不存在 cookie,可能存在 1 个 cookie,或者可能存在所有 3 个 cookie(取决于站点访问者)。

如果所有三个 cookie 都存在,我需要将它们全部插入到单个隐藏字段的值中(它们的外观并不重要)。有没有办法修改脚本,以便我可以从多个 cookie 中获取值,所有这些值都插入到单个隐藏字段值中?

【问题讨论】:

    标签: javascript forms cookies


    【解决方案1】:

    您正在更改不存在的#coupon 的值。您隐藏输入的 id 是 coupon-0

    至于获取0-3个cookie并将它们放置在隐藏字段中:

    function getCookies(...names) {
      const cookies = document.cookie.split('; ').reduce((cookieObj, cookie) => {
        const [name, value] = cookie.split('=');
    
        return {
          ...cookieObj,
          [name]: value,
        };
      }, {});
    
      return names.reduce((values, name) => {
        if (cookies[name]) {
          values.push(cookies[name]);
        }
    
        return values;
      }, []);
    }
    
    console.log(getCookies('_ga', 'cookie_that_doesnt_exist', '_gid'));
    

    这将返回一个cookie值数组,顺序将由您传递的名称的顺序决定。如果 cookie 名称不存在,则跳过它。只需加入数组即可设置输入值。

    【讨论】:

    • 谢谢。使用您的代码,在 php 页面中,我的编辑器中不断出现错误。我检查了一个在线 javascript 验证器,它说 ...cookieObj (大约第 6 行)是一个意外的令牌。另外,如何让脚本将 cookie 值放入隐藏的表单字段?
    • 您可能会遇到错误,因为它是 es6。该函数返回一个字符串数组;只需 join 数组并设置 val()$('#coupon-0')
    • 我是 javascript 的业余爱好者。不确定如何加入数组并将值设置为 coupon-0。有关如何执行此操作的任何建议?
    • getCookies('yourCookie').join('')?就像我说的,#coupon 不存在,但 #coupon-0 存在。
    • 我了解优惠券-0,但我不了解表单字段和脚本应该是什么才能使这项工作。我想我需要付钱给一个比我更懂 javascript 的程序员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多