使用JavaScript无法正常工作提交Codemirror数据

时间:2016-06-01 22:35:05

标签: javascript html forms codemirror

如何在使用Codemirror并使用JavaScript提交表单时,如何防止需要提交表单两次。发生的事情是,我在Codemirror Textarea中所做的任何更改都临时存储在另一个Textarea中(它没有名称或ID)。如果我单击两次提交按钮,则会发送正确的数据,但我希望避免必须单击两次。以下是我提交表单的源代码:

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解决方案。感谢。

1 个答案:

答案 0 :(得分:2)

您可能需要考虑使用cm.getDoc().getValue()而不是直接从DOM元素(e.elements[i].value))读取值。

cm是对当时实例化的CodeMirror对象的引用,如var cm = CodeMirror(...)