HTML 将复选框分配给已定义的表单操作

2024-03-09

I have the form with action targeted for the specified task. I want to have this form also sent by email. It can be the :mailto option or other. Mailto on submit button https://stackoverflow.com/questions/12626940/mailto-on-submit-button enter image description here

因此,当我单击“提交表单”时,表单就会被提交。但是,我想在此操作中附加另一个操作,即我想通过检查复选框将已填写的表格发送到电子邮件。

到目前为止,我看到可以通过复选框发送表单:

选中复选框时提交表单 https://stackoverflow.com/questions/10602470/submitting-a-form-when-a-checkbox-is-checked

但这里的关键是分配另一个form action以我的形式...

具有多个“操作”的 HTML 表单 https://stackoverflow.com/questions/16660734/html-form-with-multiple-actions

我尝试过这样的事情:

  <form id="c_form"  action="default_url_when_press_enter" method="get" onsubmit="return validate(this);" target="_blank" >

  ....

  <input type="checkbox" action="mailto:[email protected] /cdn-cgi/l/email-protection" id="cfemail" name="email">
  <input class="btn" action="c_form.html" type="submit" id="cfsubmit" value="Submit form">

但不幸的是,它并没有像下面应用的代码一样工作:

   document.getElementById("cfsubmit").addEventListener("click", function(){
                                                                
    document.getElementById("c_form").className="submitted";
                                                            });

当我的复选框被选中时,如何在提交表单的同时发送电子邮件?

完整的代码可以在这里找到:

https://jsfiddle.net/ptgbvfen/ https://jsfiddle.net/ptgbvfen/


到目前为止,如果我正确理解您的问题,您希望正常提交表单。但是,如果选中该复选框,您想要执行mailto功能也一样。

HTML:

<form id="c_form" onsubmit="return validate(this);" target="_self" >

  ....

  <input type="checkbox" id="openmail" name="email">
  <input class="btn" type="button" id="cfsubmit" value="Submit form">

JavaScript

document.getElementById("cfsubmit").addEventListener("click", function() {
  var check = document.getElementById("opemail"); // Get checkbox element
  var mainForm = document.getElementById("c_form"); // Get form element
  
  if (check.checked == true) { // If checked then fire
    let link=document.createElement("a"); // Creates <a> element in DOM
    link.href = "mailto:[email protected] /cdn-cgi/l/email-protection"; // Adds mailto link to <a>
    link.click(); // Clicks the <a> and open default mail app
    link.remove();
  }
  
  mainForm.submit(); // Submits the form
 });

Updated___

删除了action属性来自form元素,因为当您希望表单在当前页面上提交时不需要它。还改变了target归因于_self这样每当您提交表单时它就不会打开新选项卡。

更新V2_

Made mailto自动填充电子邮件内容checkbox检查并form已按要求提交。如果您觉得它有帮助,请点赞,如果您遇到更多问题,请在下面发表评论。谢谢。

Demo: https://jsfiddle.net/rzos1bwt/ https://jsfiddle.net/rzos1bwt/

HTML

<form id="c_form" onsubmit="return false;">
  <div id="Page1">
    <h2 class="property">Property information</h2>
    <fieldset>
      <figure class="property_information">
        <figure class="fig">
          <label>
            <div class="order">A</div>
            <p>Proposed Cable Route<span class="asterisk">&#42;</span></p>
          </label>
          <br>
          <select name="proposed_cable_route" id="cf_proposed_cable_route">
            <option value="" disabled selected>-Select your answer-</option>
            <option value="External">External</option>
            <option value="Internal">Internal</option>
            <option value="Combination">PIA</option>
          </select>
        </figure>

        <figure class="fig" id="cf_building_post_2000">
          <label>
            <div class="order">B</div>
            <p>Is the building post 2000?
              <span class="asterisk">&#42;</span>
            </p>
          </label>
          <br>
          <input name="building_post_2000" type="radio" value="Yes" selected>Yes
          <input name="building_post_2000" type="radio" value="No">No
          <br>
        </figure>

        <figure class="fig" id="cfasbestos">
          <label>
            <div class="order">C</div>
            <p>Do you have asbestos report?
              <span class="asterisk">&#42;</span>
            </p>
          </label>
          <br>
          <input name="asbestos_report" type="radio" value="Yes" selected>Yes
          <input name="asbestos_report" type="radio" value="No">No
          <br>
          <h3 class="alert">Please contact your team leader for advice!</h3>
        </figure>
      </figure>

      <figure class="fig">
        <label>
          <div class="order">9</div>
          <p>Surveyor<span class="asterisk">&#42;</span></p>
        </label>
        <br>
        <input type="text" name="surveyor" placeholder="Surveyor's name">
        <input type="email" name="surveyor_email" placeholder="Email">
        <br>
      </figure>

      <div class="emailreceipt">
        <input type="checkbox" id="opemail" name="email">
        <label for="opemail">Send me an email receipt of my responses</label>
      </div>

      <input class="btn" type="submit" id="cfsubmit" value="Submit form">
    </fieldset>
  </div>
</form>

JavaScript

document.getElementById("cfsubmit").addEventListener("click", function() {
  var check = document.getElementById("opemail"); // Get checkbox element
  var formEl = document.forms.c_form; // Get the form
  var formData = new FormData(formEl); // Creates form object
  
  // Get all form data values
  var cableRoute = formData.get('proposed_cable_route');
  var buildingPost = formData.get('building_post_2000');
  var asbestosReport = formData.get('asbestos_report');
  var surveyorName = formData.get('surveyor');
  var surveyorEmail = formData.get('surveyor_email');
  
  // This will create the subject of form
  var subject = "Submission from " + surveyorName;
  
  // This will create body with filled data
  var body = 'My name is ' + surveyorName + '\n' + 'My email is ' + surveyorEmail + '\n' + 'Proposed Cable Route: ' + cableRoute + '\n' + 'Is the building post 2000: ' + buildingPost + '\n' + 'Do you have asbestos report: ' + asbestosReport;
  
  // Making the mailto link with urlencoding
  var mailTo = "mailto:[email protected] /cdn-cgi/l/email-protection?subject="+encodeURI(subject)+"&body="+encodeURI(body);
  
  if (check.checked == true) { // If checked then fire
    let link=document.createElement("a"); // Creates <a> element in DOM
    link.href = mailTo; // Adds mailto link to <a>
    link.click(); // Clicks the <a> and open default mail app
    link.remove();
  }
  
  //console.log("mailTo => ", mailTo)
  mainForm.submit(); // Submits the form
 });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML 将复选框分配给已定义的表单操作 的相关文章

  • 如何绕过 IE8 对 data:uri Base64 编码的 32k 限制?

    我需要向浏览器发送包含 1920x1080 png 的 html 响应 这是一个 html 查询截取的屏幕截图 我对图像进行 base64 编码 并将其作为 text html 内容类型嵌入发送 一些简单的事情 比如 Whatever im
  • 获取 Firebase AngularFire 中项目的索引 ID

    这里提出了类似的问题 但接受的答案并没有真正回答这个问题 使用 AngularFire 是否可以创建关系型数据库 或者访问 UniqueID https stackoverflow com questions 16879484 using
  • 将 JSON 字符串传递给 Django 模板

    我一直在用头撞墙 试图找出为什么我无法将从 Django 模型生成的 JSON 字符串传递到模板的 javascript 静态文件中 事实证明 问题不在模型级别 使用serializers serialize 在脚本本身中放入相同的字符串将
  • jQuery 删除函数真的删除 Dom 元素吗?

    我真的想知道 jQuery 是否remove http api jquery com remove 函数确实从 DOM 中删除元素 首先 我看了here https stackoverflow com questions 2185760 j
  • 是否可以全局文本对齐表列而不在每行中指定类?

    想知道提高效率的最佳方法是什么 也许使用 jQuery 我可以接受不兼容 ie7 的解决方案 如果需要的话 即使缺乏对 ie8 的支持也可以 table th td class cal center td td left td td cla
  • AngularJS 与(Angular JS + jQuery)

    我有一个关于仅使用 AngularJS 和纯 JavaScript 以及使用 AngularJS 和 jQuery 时的性能问题 ex app directive fitHeight function window return restr
  • 输入号码时自动格式化 SSN

    我有一个文本字段 用户输入 SSN 号码 输入自身时 它应该格式化 就像关于文本字段的更改 它应该格式化999 999 999以这种方式在显示器本身上 kottenator 的脚本几乎已经完成 但它每隔 3 位数字就中断该值 而不是 3 位
  • 如何使 Meteor 上的服务器可以访问文本文件

    我很惊讶我无法在这里搜索我的答案 似乎没有其他人遇到这个问题 当您运行meteor服务时 js html等被打包在 meteor local build文件夹中 但它似乎排除了不是js或html的内容 我有一个名为 magicsets 的文
  • JQuery 网络摄像头插件 - 无需 PHP 即可保存图像

    我正在使用 JQuery 网络摄像头插件 这是主页 http www xarg org project jquery webcam plugin 它看起来非常有用 但我的问题是我不知道如何使用asp net 不使用php 保存图像 有人有什
  • bootstrap-datetimepicker 仅显示日期

    我正在用这个repo https github com smalot bootstrap datetimepicker由 smalot 提供 我只想选择并显示日期 对于其他一些地方 我显示数据和时间 因此选择此存储库 我可以设法仅使用它来选
  • 如何实现 chromecast 对 html5 播放器的支持

    我使用js和html5设计了一个具有一些自定义功能的html5播放器 现在我需要在html5播放器上添加chromecast选项 例如https raw githubusercontent com kim company videojs c
  • Chrome 和 IE 上的滚动/延迟事件

    我试图让用户始终看到一个内容块 即使他向下滚动页面也是如此 他还应该能够上下滚动内容块 这是一个精简版本的小提琴 向您展示我的意思 http jsfiddle net 9ehfV 2 http jsfiddle net 9ehfV 2 人们
  • 在 gulp 和 browsersync 问题中观看新文件

    我使用 browsersync 在文件更改时重新加载浏览器 而且它工作完美 但是当我创建新文件 例如 html scss js 时 bowsersync 不起作用 如何解决这个问题 gulpjs Browser Sync gulp task
  • Twitter Bootstrap 行过滤器/搜索框

    我无法找到有关如何为 Twitter Bootstrap 创建简单搜索查询或行过滤器的教程 我已经尝试了很多 我不确定是否我做错了什么或者插件与 Bootstrap 不兼容 如果可以的话请帮忙 我试过了 document ready fun
  • ExtJS:简单表单忽略 formBind

    我有一个小问题让我发疯了好几天 我有一个表单面板 Ext define EC view PasswordPanel extend Ext form Panel alias widget pwdpanel bodyPadding 15 ini
  • iPad 上的网站纵向视图

    我的网站在 iPad 纵向模式下无法正确显示 它在横向模式下看起来不错 但当我将其转换为纵向模式时 我最终会得到一个混乱的网站 所有元素都分散在整个网站上 我怎样才能解决这个问题 请帮我 这是我网站的链接 inclouds co uk ht
  • 如何在 HTML 中创建可编辑的下拉列表?

    我想创建一个带有下拉列表的文本字段 让用户选择一些预定义的值 用户还应该能够键入新值或从下拉列表中选择预定义值 我知道我可以为此使用两个小部件 但在我的应用程序中 如果将其统一在一个小部件中会更符合人体工程学 是否有标准小部件或者我必须使用
  • 如何使用 jquery 生成并附加随机字符串

    一般性 我想使用 jQuery 或 javascript 将随机字符串附加到元素的属性 规格 我需要引用 CDN 上的 CSS 文件 不幸的是 每次更新该 CSS 文件时 CDN 都会更改该文件的 URL 所以我不能简单地引用静态 URL
  • javascript初学者:在javascript中添加动态样式? [复制]

    这个问题在这里已经有答案了 可能的重复 如何使用 Javascript 创建 标签 https stackoverflow com questions 524696 how to create a style tag with javasc
  • 如何从 vue 组件调用 App.vue 中的方法

    我有一个 vue 组件和一个 vue 元素声明 如下所示 Vue component todo item template li This is a todo li methods test function I am getting an

随机推荐