【问题标题】:Changing the value of a hidden field to the value of a checkbox on submit with javascript inside Contact Form 7 Wordpress plugin使用 Contact Form 7 Wordpress 插件中的 javascript 在提交时将隐藏字段的值更改为复选框的值
【发布时间】:2018-11-10 18:12:17
【问题描述】:

我已经尝试让这个工作一个多星期了,无休止地寻找解决方案,我无法弄清楚我做错了什么。我不是编码员,只是想将一些功能用胶带粘在一起以使其正常工作...请帮助!

我在 Wordpress 页面内的 Contact Form 7 表单上有以下复选框输入。我有 Mailchimp for Wordpress 更新反映访问者兴趣的组。我正在尝试获取分配给隐藏输入字段的组的值,以便内置邮件功能和其他 Zapier 集成可以使用兴趣值。这些应用中的大多数似乎都不支持 Mailchimp 中的群组功能。

表单html如下:

<p>
    <label>Which Are You Most Interested In?</label></br>
    <label>
        <input name="mc4wp-INTERESTS[gs8o25e9bc][]" type="checkbox" 
value="ac2ed8233d" 
        required=""><span>Interest 1</span>
    </label>
    <label>
        <input name="mc4wp-INTERESTS[gs8o25e9bc][]" type="checkbox" 
value="s3g2c99k0x"
        required=""> <span>Interest 2</span>
    </label>
    <label>
        <input name="mc4wp-INTERESTS[gs8o25e9bc][]" type="checkbox" 
value="k9n6xp3s26"
        required=""> <span>Interest 3</span>
    </label>
</p>

<input type="hidden" id="int-in" name="int-in"</input>

--

我已经尝试了几种变体,包括一些内联的东西,将代码放在页面的顶部或底部,将其放入 Contact Form 7 的附加部分,将其放入 wordpress 内的脚本插件中,试图看看它是否是一个数组,并尝试从数组推送代码(更多在我的头上)等等。这就是我基本上想要做的事情,尽管通过这段代码错误地因为显然它不起作用......

JS:

    $('form').submit(function() {
    $('input[name="#mc4wp-INTERESTS[gs8o25e9bc] . 
    []"]').change(function(){ 
    $('#int-in').val($('input[name="#mc4wp-INTERESTS[gs8o25e9bc] . 
    []"]').val());
    });

--

在线对 Mailchimp 群组的支持不多,我怀疑大多数联系人应用程序的群组功能,甚至没有付费插件功能。 Mailchimp for Wordpress 有我能找到的最多支持,你仍然需要做一些修改才能让它工作。我已经准备好知道到底是什么,而不是我一直在尝试的所有东西!先感谢您。对此,我真的非常感激!

【问题讨论】:

    标签: javascript wordpress mailchimp


    【解决方案1】:

    Wordpress 禁用了 $ 快捷方式,因此您需要将 $ 替换为 jQuery 或包装您的代码:

    (function($){
      // your code here
    })(jQuery);
    

    另外,这些复选框中的 name 不包含主题标签。我也不知道你在用那些点和换行符做什么。 此外,您仅在提交表单时才分配 onchange 处理程序,但您希望它从一开始就起作用。

    这是一个解决方案,它设置 onchange 处理程序以从所有选中的复选框中获取值并将其放入隐藏的输入中。

    var selector = 'form input[name="mc4wp-INTERESTS[gs8o25e9bc][]"]';
    
    (function($) {
      $(selector).change(function() {
        var interests = Array.from(document.querySelectorAll(selector))
          .filter(e => e.checked).map(e => e.value).join(",");
        $('#int-in').val(interests);
        console.log("set to", interests);
      });
    })(jQuery);
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <form>
      <p>
        <label>Which Are You Most Interested In?</label><br/>
        <label>
            <input name="mc4wp-INTERESTS[gs8o25e9bc][]" type="checkbox" 
    value="ac2ed8233d"><span>Interest 1</span>
        </label>
        <label>
            <input name="mc4wp-INTERESTS[gs8o25e9bc][]" type="checkbox" 
    value="s3g2c99k0x"> <span>Interest 2</span>
        </label>
        <label>
            <input name="mc4wp-INTERESTS[gs8o25e9bc][]" type="checkbox" 
    value="k9n6xp3s26"> <span>Interest 3</span>
        </label>
      </p>
    
      <input type="hidden" id="int-in" name="int-in">
      <input type="submit">
    </form>

    【讨论】:

    • 不太正确,wordpress 不会禁用“$ 快捷方式”。 jQuery 只需要正确初始化。即 jQuery(document).ready(function($) {....});
    • 上述解决方案有效,谢谢。我不知道这些点/换行符是如何到达那里的...我认为这是由于尝试格式化此帖子问题的代码大声笑...我在表单上确实有另一个复选框,该复选框被添加到不过现在的兴趣。有没有办法将其排除在添加该复选框或仅专门选择兴趣复选框?再次感谢你!距离越来越近,我感到非常轻松。
    • 我想通了!非常感谢你帮助我!!! -- (function($) { $('form input[name="mc4wp-INTERESTS[gs8o25e9bc][]"]').change(function() { var interest = Array.from(document.querySelectorAll('form input [name="mc4wp-INTERESTS[gs8o25e9bc][]"]')) .filter(e => e.checked).map(e => $(e).next().text()).join(" , "); $('#int-in').val(interests); console.log("set to",interests); }); })(jQuery);
    • 抱歉,呃,现在好像表单有问题...取决于选中的框,有时值会返回空白。 :/那是因为我将其更改为按名称而不是类型吗?有什么办法可以解决这个问题?
    • @GavinSimpson 我的意思是你通常可以从$(...).bla() 开始,只要脚本位于它所引用的元素之下,并且不需要包装器。如果脚本在头部,则需要您使用的那个,因此需要等到 DOM 准备好之后,但这基本上证明了我的说法,即不能使用 $ 而不是 jQuery (因此我将其标记为“快捷方式”)在 Wordpress 环境中没有包装器(因为 WP 使用 this
    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2023-04-08
    • 2016-10-14
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多