从 jquery 提交表单并在 jquery 中捕获表单提交事件
Submit a form from jquery and catch the form submitted event inside jquery
我正在尝试从 jquery 调用表单提交并且我想在单击表单 submit.But 后禁用该按钮,出于某种原因它甚至没有调用 alert.If按下取消或支付按钮我想收到警报 hello.But 它没有调用 alert.Please 帮助。
$(document).ready(function() {
var table = $('#myTransactionitems').dataTable(); //Initialize the datatable
var user = $(this).attr('id');
if(user != '')
{
$.ajax({
url: 'transactions',
dataType: 'json',
cache:false,
success: function(s){
console.log(s);
table.fnClearTable();
for(var i = 0; i < s.length; i++) {
var disp1 = '';
if (s[i][4] != 'Reserved') {
disp1 = 'display:none;'
}
table.fnAddData([
"<form method='post' action='reservesplit'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'></input><input type='submit' id = 'btn-bank' name='btn-bank' value = '"+s[i][0]+"' class='btn btn-link'>\
</input></form>",
s[i][1],
s[i][2],
s[i][3],
s[i][4],
s[i][5],
"<form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden'\
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input></input><input type='submit' id = 'btn-paid' name='btn-paid' value = 'Paid' style='" + disp1 +"' class='btn btn-success btn-sm pull-left '>\
</input></form><form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden' \
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input><input type='submit' id = 'btn-cancel' name='btn-cancel' value = 'Cancel' style='" + disp1 +"' class='btn btn-danger btn-sm pull-right'>\
</input></form>"
]);
} // End For
},
error: function(e){
console.log(e.responseText);
}
});
}
$('form').submit(function(){
alert("hello");
$(this).find(':submit').attr('disabled','disabled');
$(this).parent("form").submit();
});
});
您正在使用 AJAX 将表单动态添加到 DOM,这是异步的。因此,当您调用 $('form').submit()
来绑定您的处理程序时,表单尚未在 DOM 中。您需要在添加表单后调用它,方法是在 success:
函数中执行。
此外,$(this).parent("form").submit()
应该只是 $(this).submit()
。 $(this)
是表格,你不需要去它的父级。并且您应该使用 event.preventDefault()
来防止正常的表单提交发生。
$(document).ready(function() {
var table = $('#myTransactionitems').dataTable(); //Initialize the datatable
var user = $(this).attr('id');
if(user != '')
{
$.ajax({
url: 'transactions',
dataType: 'json',
cache:false,
success: function(s){
console.log(s);
table.fnClearTable();
for(var i = 0; i < s.length; i++) {
var disp1 = '';
if (s[i][4] != 'Reserved') {
disp1 = 'display:none;'
}
table.fnAddData([
"<form method='post' action='reservesplit'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'></input><input type='submit' id = 'btn-bank' name='btn-bank' value = '"+s[i][0]+"' class='btn btn-link'>\
</input></form>",
s[i][1],
s[i][2],
s[i][3],
s[i][4],
s[i][5],
"<form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden'\
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input></input><input type='submit' id = 'btn-paid' name='btn-paid' value = 'Paid' style='" + disp1 +"' class='btn btn-success btn-sm pull-left '>\
</input></form><form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden' \
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input><input type='submit' id = 'btn-cancel' name='btn-cancel' value = 'Cancel' style='" + disp1 +"' class='btn btn-danger btn-sm pull-right'>\
</input></form>"
]);
} // End For
$('form').submit(function(e){
alert("hello");
e.preventDefault();
$(this).find(':submit').attr('disabled','disabled');
$(this).submit();
});
},
error: function(e){
console.log(e.responseText);
}
});
}
});
或者您可以使用事件委托,如 Event binding on dynamically created elements?
中所述
我正在尝试从 jquery 调用表单提交并且我想在单击表单 submit.But 后禁用该按钮,出于某种原因它甚至没有调用 alert.If按下取消或支付按钮我想收到警报 hello.But 它没有调用 alert.Please 帮助。
$(document).ready(function() {
var table = $('#myTransactionitems').dataTable(); //Initialize the datatable
var user = $(this).attr('id');
if(user != '')
{
$.ajax({
url: 'transactions',
dataType: 'json',
cache:false,
success: function(s){
console.log(s);
table.fnClearTable();
for(var i = 0; i < s.length; i++) {
var disp1 = '';
if (s[i][4] != 'Reserved') {
disp1 = 'display:none;'
}
table.fnAddData([
"<form method='post' action='reservesplit'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'></input><input type='submit' id = 'btn-bank' name='btn-bank' value = '"+s[i][0]+"' class='btn btn-link'>\
</input></form>",
s[i][1],
s[i][2],
s[i][3],
s[i][4],
s[i][5],
"<form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden'\
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input></input><input type='submit' id = 'btn-paid' name='btn-paid' value = 'Paid' style='" + disp1 +"' class='btn btn-success btn-sm pull-left '>\
</input></form><form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden' \
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input><input type='submit' id = 'btn-cancel' name='btn-cancel' value = 'Cancel' style='" + disp1 +"' class='btn btn-danger btn-sm pull-right'>\
</input></form>"
]);
} // End For
},
error: function(e){
console.log(e.responseText);
}
});
}
$('form').submit(function(){
alert("hello");
$(this).find(':submit').attr('disabled','disabled');
$(this).parent("form").submit();
});
});
您正在使用 AJAX 将表单动态添加到 DOM,这是异步的。因此,当您调用 $('form').submit()
来绑定您的处理程序时,表单尚未在 DOM 中。您需要在添加表单后调用它,方法是在 success:
函数中执行。
此外,$(this).parent("form").submit()
应该只是 $(this).submit()
。 $(this)
是表格,你不需要去它的父级。并且您应该使用 event.preventDefault()
来防止正常的表单提交发生。
$(document).ready(function() {
var table = $('#myTransactionitems').dataTable(); //Initialize the datatable
var user = $(this).attr('id');
if(user != '')
{
$.ajax({
url: 'transactions',
dataType: 'json',
cache:false,
success: function(s){
console.log(s);
table.fnClearTable();
for(var i = 0; i < s.length; i++) {
var disp1 = '';
if (s[i][4] != 'Reserved') {
disp1 = 'display:none;'
}
table.fnAddData([
"<form method='post' action='reservesplit'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'></input><input type='submit' id = 'btn-bank' name='btn-bank' value = '"+s[i][0]+"' class='btn btn-link'>\
</input></form>",
s[i][1],
s[i][2],
s[i][3],
s[i][4],
s[i][5],
"<form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden'\
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input></input><input type='submit' id = 'btn-paid' name='btn-paid' value = 'Paid' style='" + disp1 +"' class='btn btn-success btn-sm pull-left '>\
</input></form><form method='post'><input name = 'transactionID' type='hidden'\
value='"+s[i][0]+"'><input name = 'donationID' type='hidden' \
value='"+s[i][2]+"'><input name = 'splitAmount' type='hidden'\
value='"+s[i][3]+"'></input><input type='submit' id = 'btn-cancel' name='btn-cancel' value = 'Cancel' style='" + disp1 +"' class='btn btn-danger btn-sm pull-right'>\
</input></form>"
]);
} // End For
$('form').submit(function(e){
alert("hello");
e.preventDefault();
$(this).find(':submit').attr('disabled','disabled');
$(this).submit();
});
},
error: function(e){
console.log(e.responseText);
}
});
}
});
或者您可以使用事件委托,如 Event binding on dynamically created elements?
中所述