[英]Create a form dynamically with jquery and submit
我正在嘗試通過 jquery 動態創建一個表單並將其提交到一個 PHP 文件。 這會創建表單,但當我單擊提交按鈕時沒有任何反應。 這里出了什么問題?
我用來動態創建表單的方法是:-
$('#share').append("<form action='sharer.php' method='POST'/>");
$('#share').append("<div class= 'appm'>Save this/div/>");
$('#share').append("<input type='text' placeholder='Name' name='routename' id='rname'/>");
$('#share').append("<input type='text' placeholder='description' id='rdescription' name='routedescription' class= 'address'/>");
$('#share').append("<input type='text' placeholder='tags' id='tags' name='routetags' />");
$('#share').append("<br><input type='submit' id='savebutton' value = 'Save' />");
$('#share').append("</form>");
您將添加到父元素的所有內容附加,因此它們不會進入表單本身。 解決這個問題的方法:
$("#share").append('<form action="sharer.php" method="POST">');
$("#share form").append('<div class="appm">Save this</div>');
$("#share form").append('<input type="text" placeholder="Name" name="routename" id="rname"/>');
$("#share form").append('<input type="text" placeholder="description" id="rdescription" name="routedescription" class="address"/>');
$("#share form").append('<input type="text" placeholder="tags" id="tags" name="routetags"/>');
$("#share form").append('<br><input type="submit" id="savebutton" value="Save" />');
之后您不需要為表單附加結束標記。
(jsperf 鏈接在那里)
如果您真的想要一個良好的性能解決方案,請選擇純 JavaScript 代碼:
var div = document.getElementById('share');
var form = document.createElement('form');
form.setAttribute('action', 'sharer.php');
form.setAttribute('method', 'POST');
/*-----------*/
var appm = document.createElement('div');
appm.appendChild(document.createTextNode('Save This'));
appm.setAttribute('class', 'appm');
/*-----------*/
var input1 = document.createElement('input');
input1.setAttribute('type', 'text');
input1.setAttribute('placeholder', 'Name');
input1.setAttribute('name', 'routename');
input1.setAttribute('id', 'rname');
var input2 = document.createElement('input');
input2.setAttribute('type', 'text');
input2.setAttribute('placeholder', 'description');
input2.setAttribute('name', 'routedescription');
input2.setAttribute('id', 'rdescription');
input2.setAttribute('class', 'address');
var tags = document.createElement('input');
tags.setAttribute('type', 'text');
tags.setAttribute('placeholder', 'tags');
tags.setAttribute('name', 'routetags');
tags.setAttribute('id', 'tags');
var submit = document.createElement('input');
submit.setAttribute('type', 'submit');
submit.setAttribute("value", "Save");
submit.setAttribute('id', 'savebutton');
form.appendChild(input1);
form.appendChild(input2);
form.appendChild(tags);
form.appendChild(submit);
div.appendChild(form);
首先,有一種更簡單的方法來寫。 其次,您沒有在表單中附加任何內容。 我會重寫兩種方式之一。
<script type="text/javascript">
$(function() {
$('#share').append(
$('<form />', { action: 'sharer.php', method: 'POST' }).append(
$('<div />', { class: 'appm', text: 'Save this' }),
$('<input />', { id: 'rname', name: 'routename', placeholder: 'Name', type: 'text' }),
$('<input />', { class: 'address', id: 'rdescription', name: 'routedescription', placeholder: 'description', type: 'text' }),
$('<input />', { id: 'tags', name: 'routetags', placeholder: 'tags', type: 'text' }),
$('<br />'),
$('<input />', { id: 'savebutton', type: 'submit', value: 'Save' })
)
)
})
</script>
對於示例 1,您可能需要動態分配events
。 如:
<script type="text/javascript">
$(function() {
$(document).on('click', '#share form input[type=submit]', function(e) {
e.preventDefault();
/* do work */
})
})
</script>
<script type="text/javascript">
$(function() {
var $form = $('<form />', { action: 'sharer.php', method: 'POST' }),
frmSave = $('<div />', { class: 'appm', text: 'Save this' }),
frmRName = $('<input />', { id: 'rname', name: 'routename', placeholder: 'Name', type: 'text' }),
frmRDesc = $('<input />', { class: 'address', id: 'rdescription', name: 'routedescription', placeholder: 'description', type: 'text' }),
frmRTags = $('<input />', { id: 'tags', name: 'routetags', placeholder: 'tags', type: 'text' }),
frmButton = $('<input />', { id: 'savebutton', type: 'submit', value: 'Save' });
$form.append(frmSave, frmRName, frmRDesc, frmRTags, $('<br />'), frmButton).appendTo($('#share'));
})
</script>
在示例 2 中,您可以稍后使用變量(如果需要,甚至可以將它們設為全局變量)並使用變量進行更改,例如:
<script type="text/javascript">
$(function() {
frmButton.on('click', function(e) {
e.preventDefault();
/* do work */
})
})
</script>
JQuery 永遠不會允許您在不關閉標簽的情況下放置標簽。 所以現在,您的代碼創建一個表單並在表單之后添加元素(不在內部)。
但是您可以創建一個表單,將其保存在 var 中並將您的內容附加到 var 中。
var form = $('<form/>', {action : 'sharer.php', method : 'POST'}).appendTo('#share');
form.append("<div class= 'appm'>Save this</div>");
form.append("<input type='text' placeholder='Name' name='routename' id='rname'/>");
form.append("<input type='text' placeholder='description' id='rdescription' name='routedescription' class= 'address'/>");
form.append("<input type='text' placeholder='tags' id='tags' name='routetags' />");
form.append("<br/><input type='submit' id='savebutton' value='Save' />");
這也是最佳的,因為您正在緩存表單,而不是為每個附加創建一個 jQuery 對象!
工作小提琴: http : //jsfiddle.net/Lb8BY/ (附加到正文)
@Karl-André Gagnon - 跳出框框思考:)
//Start
var $positionTitle = $('.fac_ad_apply_title').text(),
$departmentTitle = $('.fac_ad_apply_appt_org').text();
$requiredText = $('.fac_ad_apply_required').text();
//Creating variables - contact information
var $form = $('#user_response'),
$formAttr = $form.attr(),
$firstName = $('#first_name').attr(),
$middleName = $('#middle_name').attr(),
$lastName = $('#last_name').attr(),
$suffixName = $('#suffix').attr(),
$email = $('#email').attr()
//Form
$('#fac_ad').before(
$('<h1 />').append($positionTitle),
$('<h3 />').append($departmentTitle),
$('<p />').append($requiredText),
$('<form />', $formAttr).append(
//Contact Information
$('<div class="form-group" />').append(
$('<label for="">First Name</label>'),
$('<input class="form-control" />', $firstName)
),
$('<div class="form-group" />').append(
$('<label for="">Middle Name</label>'),
$('<input class="form-control" />', $middleName)
),
$('<div class="form-group" />').append(
$('<label for="">Last Name</label>'),
$('<input class="form-control" />', $lastName)
),
$('<div class="form-group" />').append(
$('<label for="">Email address</label>'),
$('<input class="form-control" />', $suffixName)
),
$('<div class="form-group" />').append(
$('<label for="">Suffix/Degree(s)</label>'),
$('<input class="form-control" />', $email)
)
)
)
我將使用 jQuery on()
方法提交表單,它允許您將事件綁定到由靜態元素(例如 body 標簽)錨定的動態創建的元素
$("body").on("submit", "#share form", function(event){
event.preventDefault();
});
在您的情況下,如果表單未提交,我將使用 ajax 提交表單而不是標准表單提交。 如果您希望刷新發生,您甚至可以在完成后執行 javascript 頁面刷新
$("body").on("submit", "#share form", function(event){
event.preventDefault();
// Grab all form data
var formInputData = $(this).serializeObject();
// send form data to php file in $_POST array
$.post("sharer.php", formInputData, function(data){
// log errors or anything that is echoed back from php file
console.log(data);
// refresh the page
window.location.reload();
});
});
不要忘記將其全部放入文檔就緒函數中,並將 jQuery 庫包含在您的 HTML head 標記中
$(document).ready(function(){
$("body").on("submit", "#share form", function(event){
event.preventDefault();
// Grab all form data
var formInputData = $(this).serializeObject();
// send form data to php file in $_POST array
$.post("sharer.php", formInputData, function(data){
// log errors or anything that is echoed back from php file
console.log(data);
// refresh the page
window.location.reload();
});
});
});
jQuery 包含示例
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.