Программная отправка данных в 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;
}