Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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"/>

стринг - содержащий путь к файлу
Ответить с цитированием
  #2 (permalink)  
Старый 14.05.2009, 16:25
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Честно говоря, очень сильно сомневаюсь, что данный скрипт может вернуть реальный путь к файлу. Проверять не буду, но если это действительно так, то где то не доработка в защите мозилы. В любом случае, если ты получаешь нужный результат и всего лишь не можешь его передать "хидден" полю, то можно обойти это и другим путём, чего тут заморачиваться?
function initPath(){
	var path2file=function getPath2file(p){
		return '/path/to/file/'+p;
	};
	var pathInput=document.createElement('input');
	with(pathInput){
		type='hidden';
		name='pagePath';
		value=path2file('bla-bla-bla');
	}
	document.forms[0].appendChild(pathInput);
//ну и если требуется сразу...
	document.forms[0].submit();
}
initPath();

И ничего тут такого ужасного нету. Понятное дело, что вместо getPath2file у тебя должна указываться та "волшебная" функция, которая возвращает путь к файлу и вместо forms[0] должна указана форма, в которую ты будешь "апендить" созданный "хидден"-элемент.
Ответить с цитированием
  #3 (permalink)  
Старый 15.05.2009, 13:22
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

а сервер сам не знает этот путь? И что значит "у меня не получается просабмитить input", ошибки возникают?
Pattern, речь о пути на сервере, насколько я понял
Ответить с цитированием
  #4 (permalink)  
Старый 15.05.2009, 15:36
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Сообщение от arhim
мой скрипт пытается аплоадить файлы в этот input
x-yuri, эта фраза меня просто поставила в тупик, потому и подумал, что скрипт возвращает путь к локальному файлу.
Ответить с цитированием
  #5 (permalink)  
Старый 15.05.2009, 16:04
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

да уж, фраза зачотная
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в теге input изменение атрибута type gabber Internet Explorer 6 11.11.2008 13:01
Копирование из одного input в другой input bar-boss Общие вопросы Javascript 7 08.04.2008 19:10
input с автоДополнением zem Элементы интерфейса 3 19.03.2008 09:34
Разным элементам input - разное форматирование. Как? eclipse (X)HTML/CSS 1 25.10.2007 13:55
Позиция курсора в input type="text" (ie) Кирпич Общие вопросы Javascript 2 21.10.2007 06:44