2016-01-21 21 views
0

我有一個HTML表單,從複選框檢索某些選項:發送Javascript數組在郵件

 <form action="" method="post" id="menuform" name="menuform"> 
     <fieldset> 
      <legend>Select a Menu</legend> 
      <label> 
       <input type="radio" name="selectedmenu" checked value="menu01" ape-qty='8' ent-qty='1' pes-qty='1' sor-qty='1' car-qty='1' pos-qty='1' data-price='95' /> 
       <span>First Item</span> 
      </label> 
      ...(more)... 
     </fieldset> 
     <fieldset> 
      <legend id='aperitivosPrompt'>Elegir Aperitivos</legend> 
      <label> 
       <input type='checkbox' name='aperitivos' value="1" /> 
       <span>Item 1</span> 
      </label> 
      <label> 
       <input type='checkbox' name='aperitivos' value="2" /> 
       <span>Item 2</span> 
      </label> 
      <label> 
       <input type='checkbox' name='aperitivos' value="3" /> 
       <span>Item 3</span> 
      </label> 
      ...(more)... 
     </fieldset>    
     <fieldset> 
      <input type="submit" value="Enviar" /> 
     </fieldset> 
    </form> 

然後我送這個變量的JavaScript文件,我保存所有複選框選項在多個陣列

var menuform = document.getElementById('menuform'), 
    radios = document.getElementsByName('selectedmenu'), 
    aperitivos = document.getElementsByName('aperitivos'), 
    aperitivosPrompt = document.getElementById('aperitivosPrompt'), 
    totalPrice = document.getElementById('totalPrice'), 
    result = document.getElementById('result'), 
    aperitivosAllowed = 0, 
    currentSelectionAperitivos = [], 
    currency = '€'; 

function handleAperitivos(e) { 
    var count = getSelectedCountApe(); 
    if (count > aperitivosAllowed) { 
     resetSelectApe(); 
    } else { 
     currentSelectionAperitivos = getSelectedValuesApe(); 
    } 
} 
...(more)... 
function getSelectedCountApe() { 
    var count = 0; 
    for (var i = 0; i < aperitivos.length; i++) { 
     if (aperitivos[i].checked) count++; 
    } 
    return count; 
} 
...(more)... 

那麼,如何在電子郵件中發送這些名爲currentSelectionAperitivos = []的陣列呢?我希望在用戶選擇所有選項後,我會在收件箱中收到一封電子郵件,其中包含選定的選項。

我認爲我必須連接此表格和JS文件與PHP函數,並從那裏發送電子郵件。無論如何,我該如何做到這一點?

-EDITED-

我試圖用JSON的解決方案:

for (var i = 0; i < aperitivos.length; i++) { 
    var item = { 
     "valor": i, 
     "etiqueta": aperitivos[i].value 
    }; 
    currentSelectionAperitivos.push(item); 
} 
currentJSON = JSON.stringify({currentSelectionAperitivos:currentSelectionAperitivos}); 
console.log(currentJSON); 

所以現在我在瀏覽器控制檯中看到所有的 「值」 從田地HTML表單的<input>。但不僅CHECKED值,而且我現在需要的是獲取此JSON.stringify並通過郵件使用PHP發送它。

+0

正在處理表單的php在哪裏? – jeroen

+0

研究如何通過電子郵件發送表格數據與PHP –

+0

簽出phpmailer。其中一個最簡單的PHP電子郵件插件那裏https://github.com/PHPMailer/PHPMailer –

回答

0

編寫一個PHP腳本來發送電子郵件,更改表單動作以在此腳本上發佈。

注意:這是未經測試的。

您的形式更改爲:

<form action="mail.php"...> 
</form> 

<?php 
    ob_start(); 
    var_dump($_POST); 
    $result = ob_get_clean(); 
    mail ('[email protected]' , 'subject' , $result); 
?> 

創建mail.php否則,你可以使用JSON.stringify和API與JS發送電子郵件。

+0

不適合我那簡單的解決方案。點擊發送按鈕時沒有任何反應。 –

+0

似乎var_export沒有返回一個字符串,因爲我會這樣做。上面編輯的例子確實有效。如果你想獲得多個複選框的狀態,你應該使用'name ='aperitivos []''代替。 – christian

0

我找到了一個很好的解決方案來滿足我的需求。我得到所有「檢查」的值,並創建一個包含主題的電子郵件。

所以,HTML表單:

<html> 
<head> 
    <script type='text/javascript' src='http://code.jquery.com/jquery-1.9.1.js'></script> 
    <script type='text/javascript' src='http://sisyphus-js.herokuapp.com/assets/application-09059f9f54cc3c3bff98487cf866644b.js'></script> 
</head> 

<body> 
    <form action="configurador.php" method="post" id="menuform" name="menuform"> 
     <fieldset> 
      <legend id='itemPrompt'>Choose Item</legend> 
      <label> 
       <input type='checkbox' name='item' value="Value#01" /> 
       <span>Value#01</span> 
      </label> 
      (...more...) 
      <input type="submit" name="submit" value="Send" /> 
     </fieldset> 
    </form> 
</body> 

所以有我有我所有的 '複選框' 用價值觀和名稱。我做了一些JavaScript功能,但最重要的是這一次,我檢索所有值和發送主題的電子郵件:

function sendMail() { 
    var mailbody = "My Configurator: \n\n" 
        + $('input[name="item"]') 
        .map(function(id, box){ return (box.checked ? "[x]" : "[_]") + " " + box.value;}) 
        .get() 
        .join("\n"); 
    var link = "mailto:[email protected]" 
       + "?cc=" 
       + "&subject=" + escape("Configurator - Subject") 
       + "&body=" + escape(mailbody); 
    window.location.href = link; 
} 

$(function(){ 
    $("#menuform").sisyphus(); 
}); 

而且它的確定只此。但是,我收到了該電子郵件中的所有複選框,即使沒有選中。如果我不必打開客戶郵件,只需從我的服務器自動發送郵件即可。

這種變化的任何解決方案?