javascript mailto 在 chrome 中工作,但在 IE 中不工作

javascript mailto works in chrome but not IE

我正在尝试为我们的实验室工程师构建一个简单的网页,这样当他们坐在他们的工作站时,他们可以从他们的桌面打开网页快捷方式 > select 他们在哪个实验室 > select 他们需要哪种支持 > 然后点击提交打开一封电子邮件,其中插入了所有 selected 信息 > 然后点击发送;然后向电子邮件列表中的人发送电子邮件请求。

在 Chrome 中一切正常,但我们的大多数工程师默认使用 IE,当我在 IE 中单击提交按钮时,它会打开电子邮件,但收件人:和主题:阅读 "UNDEFINED".我正在使用 IE10。

<!DOCTYPE HTML>
<html>
<link rel="stylesheet" type="text/css" href="silsupport.css">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />

<title>SILSupport</title>

<body>
<h1>SIL Support</h1>
<SCRIPT>
    function e_mail(e_add,subject1,body)
    {
        window.location="mailto:"+e_add+"?subject="+subject1+"&body="+body;
    }
</SCRIPT>
<form name="e_form" enctype="text/plain">
    <div id="para1">    
        <p>Please select which lab you are in: </p>                     
            <input name="subj" type="radio" value="Lab_1 Support" />Lab 1<br />
            <input name="subj" type="radio" value="Lab_2 Support" />Lab 2<br />
            <input name="subj" type="radio" value="Lab_3 Support" />Lab 3<br />
            <input name="subj" type="radio" value="Lab_4 Support" />Lab 4<br />
            <input name="subj" type="radio" value="Lab_5 Support" />Lab 5<br />
    </div>       

    <div id="para2">
        <p>Please select which support you require:</p>
            <input name="emadd" type="radio"  value="re@abc.com" />RE Support<br />
            <input name="emadd" type="radio"  value="admin@abc.com" />Admin Support<br />
            <input name="emadd" type="radio"  value="system@abc.com" />System Support<br />
            <input name="emadd" type="radio"  value="hwsw@abc.com" />H/W &amp; S/W Support<br />
            <input name="body"  type="hidden" value="I require support now!" />
    </div>
    <input type="button" id="Submit" Value="Submit" onClick="e_mail(this.form.emadd.value,this.form.subj.value,this.form.body.value)" />

</form>

</body>
</html>

您真的应该有自己的代码来查找选中的单选按钮:

function findChecked(radios) {
    for (var i = 0; i < radios.length && !radios[i].checked; ++i);
    return radios[i] && radios[i].value;
}

该函数需要一个列表,您将从单选按钮组的别名引用中获得该列表。它查找选中的按钮和 returns 它的值。

然后:

<input type="button" id="Submit" Value="Submit"
  onClick="e_mail(findChecked(this.form.emadd),findChecked(this.form.subj),this.form.body.value)" />

JsFiddle link

我认为您遇到的问题是由于 URL 中的字符编码引起的。 将您的代码更改为此以转义空格和感叹号等字符:

window.location="mailto:"+ encodeURIComponent(e_add) +"?subject="+ encodeURIComponent(subject1) +"&body="+ encodeURIComponent(body);

这是我要做的,因为 IE 可能不支持单个无线电值
还要逃避实验室中的 space。请注意,我将表单名称更改为 id,将按钮更改为实际提交

最后,您可以在下拉菜单中添加 size="5" 和 ="4" 以显示所有选项

DEMO

window.onload=function() {
  document.getElementById("e_form").onsubmit=function() {
    var e_add = this.emadd.value,
        subject1=this.subj.value,
        body=this.body.value,
        loc="mailto:"+e_add+"?subject="+encodeURIComponent(subject1)+"&body="+body;

    window.location=loc;
    return false; // cancel submit
  }
}
<form id="e_form" enctype="text/plain">
  <div id="para1">  
    <p>Please select which lab you are in: </p>            
    <select name="subj">
      <option value="Lab_1 Support">Lab 1</option>
      <option value="Lab_2 Support">Lab 2</option>
      <option value="Lab_3 Support">Lab 3</option>
      <option value="Lab_4 Support">Lab 4</option>
      <option value="Lab_5 Support">Lab 5</option>
    </select>
  </div>       
  <div id="para2">
    <p>Please select which support you require:</p>
    <select name="emadd">
      <option value="re@abc.com">RE Support</option>
      <option value="admin@abc.com">Admin Support</option>
      <option value="system@abc.com">System Support</option>
      <option value="hwsw@abc.com">H/W &amp; S/W Support</option>
    </select>
    <input name="body"  type="hidden" value="I require support now!" />
  </div>
  <input type="submit" Value="Send"  />
</form>