0

Stack Overflowの古いスレッドでは、JavaScriptを使用してmailtoメールに入力する方法について説明しています。

Javascriptでメールを送信する

私はこのテクニックを適用することに興味がありましたが、それを機能させることができませんでした。

以下のコードでは、makecontact()メソッドでreturn falseにブレークポイントを設定し、ログに記録されたURLを見ると、問題ないように見えます。

ただし、ブラウザは電子メールクライアントを開きません。

[送信]ボタンのhrefに同じURLをハードコーディングすると、電子メールクライアントが起動します。

hrefを設定しないのはなぜですか?

答え:それは間違ったhrefでした。

修正バージョン:

<!-- TODO: Validate name and text fields and don't allow submit until they are valid. Limit total mailto URL length to 2000. -->
<form name="contact">
<br/>Reason for contact:
<br/>
<input type="radio" name="reason" value="Product Inquiry/Presales Questions" checked="checked"/>Product Inquiry/Presales Question<br/>
<input type="radio" name="reason" value="Support/Warranty"/>Support/Warranty<br/>
<input type="radio" name="reason" value="Feedback"/>Feedback<br/>
<input type="radio" name="reason" value="Other"/>Other<br/>
<input type="text" name="name" id="name"/>Your name:</div>
<textarea name="contacttext" rows="20" cols="60" id="contacttext"></textarea>
<button id="submit">Submit</button>
</form>
<script type="text/javascript" id="contactjs">

<!--
var submit = document.getElementById("submit");

function getreason() {
    var radios, i, radio;

    radios = document.getElementsByName("reason");

    for (i = 0; i < radios.length; i += 1) {
        radio = radios[i];
        if (radio.checked) {
            break;
        }
    }

    return encodeURIComponent(radio.value);
}

function makecontact(e) {
    var subject, name, text;

    subject = getreason();
    name = document.getElementById("name").value;
    text = document.getElementById("contacttext").value;
    body = "From: '" + name + "', Content: '" + text + "'";
    body = encodeURIComponent(body);

    document.location.href = "mailto:contact@analogperfection.com?Subject=" + subject + "&Body=" + body;
    console.log(document.location.href);

    e.preventDefault();

    return false;
}

if (submit.addEventListener) {
    submit.addEventListener("click", makecontact, true);
} else if (form.attachEvent) {
    submit.attachEvent("onclick", makecontact);
} else {
    submit.click = makecontact;
}
//-->
</script>
</div>
4

2 に答える 2

3
    body = "From: ' 
" + name + " 
', Content: ' 
" + text + " 
'"; 

これは有効な JavaScript ではありません。「Unterminated string constant」エラーが発生します。代わりにこれを試してください:

    body = "From: '\n" + name + "\n', Content: '\n" + text + "\n'";
于 2012-06-17T21:28:13.203 に答える
1

2 つの主な問題があります。

  1. button要素には s がありませんhref( HTML4HTML5 )。設定しても何も起こりません。送信ハンドラーの最後に、代わりに次のように設定する必要がありますdocument.location.href

    document.location.href = "mailto:contact@analogperfection.com?Subject=" + subject + "&Body=" + body;
    
  2. JavaScript の文字列にリテラル改行を含めることはできません。\n代わりに使用してください:

    body = "From: ' \n" + name + " \n', Content: ' \n" + text + " \n'"; 
    

また、注意してください…</p>

  1. フォームの送信を停止するには、イベント ハンドラーでイベント オブジェクトを受け入れ、イベント ハンドラーevent.preventDefault()から false を返すだけでなく、 を呼び出す必要があります。

  2. という関数はありませんがresume、どちらaddEventListenerattachEvent存在しない場合はそれを使用しています。

于 2012-06-17T21:38:34.243 に答える