Программная отправка данных в iframe

В настоящее время я добавляю в резервную функцию jquery, чтобы заменить FormData для поддержки, например, 9 и ниже. Однако я сталкивался с этим сообщением: загрузка файла iframe jQuery

Я вижу, что это для загрузки файлов, которые мне понадобятся, но у меня довольно много полей в моей форме. Есть ли способ программно получить все текстовые поля в моей форме без использования formData.

Я посмотрел на использование этого, но он получит все поля ввода, но не текстовые поля, и он будет включать в себя изображения.

$("form").each(function(){
    $(this).filter(':input') //<-- Should return all input elements in that specific form.
});

Или есть лучший способ сделать это? я действительно не хочу трогать formData, так как это отлично работает для всех других браузеров, но я включил код

if(document.FormData === "undefined")

вместо этого обнаружить и использовать другую функцию. У кого-нибудь есть предложения?

РЕДАКТИРОВАТЬ:

только что попробовал следующее:

$(".inputfield").each(function(index,element){
form.attr("input:text",$(element).val());
});

но он не обновляет iframe

РЕДАКТИРОВАТЬ:

Это полный код, который я использую для загрузки формы (надеюсь)

if(window.FormData === undefined){
                    // create iframe
                    var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none" />');

                    $("body").append(iframe);

                    var form = $('.myform');
                    form.attr("action", "scripts/addtocart.php");
                    form.attr("method", "post");
                    form.attr("enctype", "multipart/form-data");
                    form.attr("encoding", "multipart/form-data");
                    form.attr("target", "postiframe");
                    $(".inputfield").each(function(index,element){
                        form.attr("input:text",$(element).val());
                    });

                    form.submit();

                    $("#postiframe").load(function () {
                        iframeContents = $("#postiframe")[0].contentWindow.document.body.innerHTML;
                        $("#textarea").html(iframeContents);
                    });
                    alert("complete");
            }

РЕДАКТИРОВАТЬ: добавлена ​​форма:

<form class="myform" onsubmit="return false;" enctype="multipart/form-data">
<input type="hidden" name="price" class="inputfield" value="<?php echo $price; ?>" />
<input type="hidden" class="inputfield" id="product" name="product" value="<?php echo $_GET['id']; ?>"/>
<input type="hidden" class="inputfield" id="sid" name="sid" value="<?php echo $_GET['sid']; ?>"/>
<input type="hidden" class="inputfield" id="hiddenvalue" name="label" value=""/>
<input type="hidden" class="inputfield" id="quantity" name="quantity" value="1"/>
<input type="hidden" class="inputfield" id="labelquantity" name="labelquantity" value=""/>
<input type="hidden" class="inputfield" id="userlabel" name="userlabel" value=""/>
<input type="hidden" class="inputfield" id="colourlabel" name="colourlabel" value=""/>
<input type="hidden" class="inputfield" id="foillabel" name="foillabel" value=""/>

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

2 ответа

Решение

Я обычно добавляю класс в поля, которые я хочу проверить, то же самое правило можно применять для того, что вы хотите сделать..

<input type="text" class="req" name="forename" value="Forename.." />
<textarea name="comments" class="req">Comments..</textarea>

и jQuery

$(".inputfield").each(function(index,element){
    form.append(element);
    //form.attr("input:text",$(element).val());
});

пример

HTML

<form action="scripts/addtocart.php" target="post_requests" enctype="multipart/form-data" type="post">
<input type="hidden" name="price" class="inputfield" value="<?php echo $price; ?>" />
<input type="hidden" class="inputfield" id="product" name="product" value="<?php echo $_GET['id']; ?>"/>
<input type="hidden" class="inputfield" id="sid" name="sid" value="<?php echo $_GET['sid']; ?>"/>
<input type="hidden" class="inputfield" id="hiddenvalue" name="label" value=""/>
<input type="hidden" class="inputfield" id="quantity" name="quantity" value="1"/>
<input type="hidden" class="inputfield" id="labelquantity" name="labelquantity" value=""/>
<input type="hidden" class="inputfield" id="userlabel" name="userlabel" value=""/>
<input type="hidden" class="inputfield" id="colourlabel" name="colourlabel" value=""/>
<input type="hidden" class="inputfield" id="foillabel" name="foillabel" value=""/>
    <input type="submit" />
</form>
<iframe name="post_requests" style="display:none;"></iframe>

<div id="response">
    Waiting for form to be posted..
</div>

Javascript

function postResponse(_html)
{
    document.getElementById('response').innerHTML = _html;
}

скрипты /addcart.php

<script type="text/javascript">
var _html = 'The form was posted..';

parent.postResponse(_html);
</script>

Этот код: form.attr("input:text",$(element).val()); устанавливает / переопределяет атрибут в <form> тег для каждого элемента, который имеет класс inputfield к тому времени form.submit(); будет эффективно это:

<form class="myform" input:text="valueOfLastElementWithClass'inputfield'">

Что я сомневаюсь, это то, что вы пытаетесь достичь. Я не уверен, что вы пытаетесь достичь, но вы можете выбрать каждый <input type="text" а также textarea а также select в jquery вот так:

$('input[type=text],textarea,select').each(function(index, element) {
  // do something;
}
Другие вопросы по тегам