2016-06-01 14 views
1

Codemirrorを使用してJavaScriptでフォームを送信するときに、フォームを2回送信する必要を回避するにはどうすればよいですか。何が起こるかは、私がCodemirror Textareaで行った変更は、一時的に別のTextareaに保存されます(名前やIDはありません)。送信ボタンを2回クリックすると正しいデータが送信されますが、2回クリックする必要はありません。ここに私のソースコードは、フォームを送信する:JavaScriptでCodemirrorデータを正しく送信できない

var ajax; 
var formData = new FormData(); 
var fileUpload = false; 
for (i = 0; i < e.elements.length; i++) 
{ 
    if (e.elements[i].type == "submit") 
    { 
     if (submitname == e.elements[i].name) 
     { 
      if (submit != null && submit.disabled) 
       submit.disabled = false; 
      submit = e.elements[i]; 
      submit.disabled = true; 
      formData.append(e.elements[i].name, e.elements[i].value); 
     } 
    } 
    else if (e.elements[i].type == "radio" || e.elements[i].type == "checkbox") 
    { 
     if (e.elements[i].checked) 
      formData.append(e.elements[i].name, e.elements[i].value); 
    } 
    else if (e.elements[i].type == "file") 
    { 
     abortButton.disabled = false; 
     var file = document.getElementsByName("file")[0].files[0]; 
     var maxSize = 1024; 
     var maxSizeBytes = 1048576 * maxSize; 
     formData.append("archivo", file); 
     fileUpload = true; 
    } 
    else 
    { 
     //alert(e.elements[i].type + e.elements[i].name + e.elements[i].class + e.elements[i].value); 
     if (e.elements[i].name == 'code') 
     { 
      alert(e.elements[i].type + e.elements[i].name + e.elements[i].value + e.elements[i + 1].value); 
      formData.append(e.elements[i].name, e.elements[i].value); 
      //formData.append(e.elements[i].name, e.elements[i].value + e.elements[i + 1].value); 
     } 
     else 
      formData.append(e.elements[i].name, e.elements[i].value); 
    } 
} 
formData.append("javascript", "javascript"); 
status = e.elements[0].value.split('/').reverse()[0] + "-status"; 
ajax = new XMLHttpRequest(); 
if (!fileUpload) 
{ 
    ajax.addEventListener("load", manageLoad, false); 
    ajax.addEventListener("error", manageError, false); 
} 
else 
{ 
    ajax.upload.addEventListener("progress", manageProgress, false); 
    ajax.addEventListener("load", _manageLoad, false); 
    ajax.addEventListener("error", _manageError, false); 
    ajax.addEventListener("abort", _manageAbort, false); 
    globalAjax = ajax; 
} 
ajax.open("POST", e.action); 
ajax.send(formData); 
return false; 

NBです。このコード行:if (e.elements[i].name == 'code')は、その要素がCodemirror Textareaであると判断します。

私は非jQueryソリューションを探しています。ありがとう。

答えて

2

DOM要素(e.elements[i].value))から値を直接読み取る代わりに、cm.getDoc().getValue()を使用することを検討してください。

cmが、その後var cm = CodeMirror(...)のように、CodeMirrorオブジェクトをインスタンス化への参照です)

+0

私はCodeMirrorオブジェクトを開始したとき、私もそれへの参照を格納していませんでした。私は時には複数のCodeMirrorオブジェクトを持っているので、それぞれのCodeMirror TextareaにIDとして数字を与えるだけで、cmArray [e.elements [i] .id] .getDoc()。getValue() 'を使うことができます。ご助力ありがとうございます。私にできるだけ早くあなたに恩恵を与えます。 –

関連する問題