Сохранение входного значения type = "file" в ColdFusion при обратной передаче - PullRequest
2 голосов
/ 21 мая 2009

У меня есть форма в ColdFusion, которая изначально имеет 5 полей ввода для загрузки файла. Если пользователь понимает, что у него есть более 5 файлов для загрузки в процессе их присоединения, я хотел бы, чтобы форма сохраняла значения, когда она подает себя для изменения количества полей.

Предполагается, что с помощью тега <cfform> с атрибутом preservedata = "yes" это можно сделать, но все, что я получаю, - это временное значение, сохраненное в значении ввода при повторной передаче, которое не отображается в поле и не работает для представления.

edit: Спасибо за отличные ответы всем, вы все помогли и были правы. Я смог реализовать предложенное Адамом решение. Работает отлично! Спасибо!

function changeFieldCount()  // javascript function for submit on input count change
 {
  var count = document.forms[0].numtotal.options[document.forms[0].numtotal.selectedIndex].value;
   document.forms[0].action = "me.cfm?count=" + count;
   document.forms[0].submit();
 }

<cfparam name="url.count" default="5">

<cfform name="dispfiles" method="post" enctype="multipart/form-data" preservedata="yes">
  <!--- looping for file input fields --->
  <cfloop index="counter" from="1" to="#url.count#">
    <cfinput type="file" name="file#counter#" size="50" maxlength="60"><br>
  </cfloop>

  <br>Number of Files to Attach: 
  <!--- looping for # of input selection--->
  <cfselect name="numtotal">
    <cfloop index="cnt" from="1" to="20" step="1">
        <cfoutput>
        <option value="#cnt#" <cfif #cnt# eq #url.count#>selected</cfif>>
            #cnt#
        </option>
        </cfoutput>
    </cfloop>
  </cfselect>

   <cfinput type="button" name="op-display" value="Display" onclick="changeFieldCount()">
   <cfinput type="button" name="op-upload" value="Attach Files" onclick="submitfrm(this.form)">
   <cfinput type="button" name="cancel" value="  Cancel  " onclick="window.close()">
</cfform>

Это то, что я получаю, когда вижу исходный текст в полученной отправке:

<input name="file1" id="file1"  type="file" value=".../cfusion.war/neotmp8858718543274653167.tmp" maxlength="60"  size="50"  /><br>

Ответы [ 3 ]

5 голосов
/ 21 мая 2009

Это сделано во всех браузерах по соображениям безопасности. Вы не можете вставить значение в поле файла.

3 голосов
/ 21 мая 2009

Чтобы уточнить ответ @ SpliFF, вам нужно динамически создавать дополнительные файловые поля с помощью JavaScript.

Вот пример, который использует jQuery , чтобы немного упростить JavaScript. Я также использовал переменную для отслеживания количества отображаемых полей файлов, чтобы к их именам добавлялся уникальный номер, позволяющий зацикливаться и однозначно определять их на стороне сервера.

<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>

<script type="text/javascript">
    //track the current number of file fields displayed
    var numUploadFields = 5;
    //attach an anonymous function to the button to add more fields
    $(function(){
        $("#add5").click(function(){
            for (var i = 0; i < 5; i++){
                numUploadFields += 1;
                var newHTML = "<br/><input type='file' name='upload" +
                              numUploadFields + "' />";
                $("#someSection").append(newHTML);
            }
        });
    });
</script>

<form method="post" action="">
    <div id="someSection">
        <input type="file" name="upload1" /><br/>
        <input type="file" name="upload2" /><br/>
        <input type="file" name="upload3" /><br/>
        <input type="file" name="upload4" /><br/>
        <input type="file" name="upload5" />
    </div>
    <input type="button" id="add5" value="Add 5 more file fields" />
</form>
2 голосов
/ 21 мая 2009

Создание дополнительных файловых входов с использованием методов JS DOM. Поскольку вы не покидаете страницу, это быстро и ничего не потеряно.

...