Показать сообщение отдельно
  #1 (permalink)  
Старый 05.05.2009, 20:11
Новичок на форуме
Отправить личное сообщение для arhim Посмотреть профиль Найти все сообщения от arhim
 
Регистрация: 05.05.2009
Сообщений: 1

Ужасный Input
мой скрипт пытается аплоадить файлы в этот input

<div class="goog-ws-bottom" xmlns="http://www.w3.org/1999/xhtml">
<div id="COMP_page-subpages" style=""> </div>
<div id="COMP_page-attachments" class="" style="">
<div id="goog-attachment-wrapper">
<h3 id="goog-attachment-header">
</h3>
<div style="" jotid="goog-attachment-inner">
<ul id="JOT_ATTACH_container">
</ul>
<form id="sites-attachment-form" class="goog-ws-attachment-form" enctype="multipart/form-data" method="post">
<p>
Приложить файл:
<input type="file" contenteditable="false" onchange="return JOT_ATTACH_handleUploadXfer()" name="userfile" onclick="this.blur()"/>
<input type="hidden" value="/Home" name="pagePath"/>
</p>
</form>
</div>
</div>
</div>


вот сам скрипт (скрипт входит в состав аддона мозилы):
const nsIFilePicker = Components.interfaces.nsIFilePicker;
var filePicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);

function SelectFiles()
{
    var files = [];
    filePicker.init(window, "Select files to upload", nsIFilePicker.modeOpenMultiple);
    var rc = filePicker.show();
    if (rc == nsIFilePicker.returnOK)
    {
        var picked = filePicker.files;
        while(picked.hasMoreElements())
        {
            var aFile = picked.getNext();
            aFile.QueryInterface(Components.interfaces.nsIFile);
            files.push(aFile.path);
        }
    }
    return files;
}
var uploader = {};
uploader.files = [];
uploader.index = 0;
uploader.iframe = null;
uploader.GetBrowser = function()
{
    return document.getElementById("pages-frame");
}
uploader.CheckIfUploadFormAvailable = function()
{
    var browser = uploader.GetBrowser();
    var available = ("file" == browser.contentDocument.forms[0].elements[0].type);
    return available;
}
uploader.SetIframeOnloadListener = function()
{
    var browser = uploader.GetBrowser();
    var iframeDiv = browser.contentDocument.getElementById("tr_upload-form-div");
    uploader.iframe = iframeDiv.getElementsByTagName("iframe")[0];
    uploader.iframe.addEventListener("load", uploader, false);
}
uploader.RemoveIframeOnloadListener = function()
{
    uploader.iframe.removeEventListener("load", uploader, false);
}
uploader.UploadNext = function()
{
    var index = uploader.index;
    if (index < uploader.files.length)
    {
        var browser = uploader.GetBrowser();
        var form = browser.contentDocument.forms[0];
        var input = form.elements[0];
        input.value = uploader.files[index];
        [B]form.submit();[/B]                // Здесь пытаюсь сабмитить форму - но не получается - строка с путем к файлу появляется, но сабмитить не получается
        var box = document.getElementById("file-upload-area");
        box.childNodes[index].checked = true;
    }
    uploader.index++;
    var pending = (uploader.index  <= uploader.files.length);
    return pending;
}
uploader.UploadFiles = function(files)
{
    uploader.files = files;
    uploader.index = 0;
    if (files.length)
    {
        uploader.SetIframeOnloadListener();
        uploader.UploadNext();
    }
}
uploader.handleEvent = function(ev)
{
    if (ev.type == "load")
    {
        var pending = uploader.UploadNext();
        var browser = uploader.GetBrowser();
        if (!pending)
        {
            var progress = document.getElementById("progress-bar");
            progress.parentNode.removeChild(progress);
            
            uploader.RemoveIframeOnloadListener();
            browser.contentDocument.forms[0].reset();
            // Dumb thing to avoid a POSTDATA prompt
            browser.goHome();
        }
    }
};


function GetFiles()
{
    if (!uploader.CheckIfUploadFormAvailable())
    {
        alert("Please, click on the \"[upload]\" link of the Uploaded Stuff widget and press again this button.");
    }
    else
    {
        var files = SelectFiles();
        var box = document.getElementById("file-upload-area");
        while (box.firstChild)
        {
            box.removeChild(box.firstChild);
        }
        var checkbox;
        for (var ii=0; ii < files.length; ii++)
        {
            checkbox = document.createElement("checkbox");
            checkbox.setAttribute("label", files[ii]);
            checkbox.setAttribute("disabled", true);
            box.appendChild(checkbox);
        }
        if (files.length)
        {
            var progress = document.createElement("progressmeter");
            progress.setAttribute("mode", "undetermined");
            progress.setAttribute("id", "progress-bar");
            box.appendChild(progress);
            
            uploader.UploadFiles(files);
        }
    }
}


у меня не получается просабмитить input

<input type="file" contenteditable="false" onchange="return JOT_ATTACH_handleUploadXfer()" name="userfile" onclick="this.blur()"/>

потому что ха ним следует

<input type="hidden" value="/Home" name="pagePath"/>

указывающий на путь в папку сервера

но если пытаюсь просабмитить в любой другой input на стринце - не содержащий <input type="hidden" value="/Home" name="pagePath"/> подобные приколы - то событие проходит

помогите пожалуйста!

мне необходимо передать в

<input type="file" contenteditable="false" onchange="return JOT_ATTACH_handleUploadXfer()" name="userfile" onclick="this.blur()"/>
<input type="hidden" value="/Home" name="pagePath"/>

стринг - содержащий путь к файлу
Ответить с цитированием