編輯:爲什麼我不能從jQuery UI對話框中觸發提交按鈕?
有人建議直接在窗體上調用提交。這不是我想要實現的。我希望能夠在輸入類型='submit'時調用click()事件,並讓它像通常那樣提交表單。 jQuery UI對話框似乎干擾了這種正常行爲。請檢查我創建的jsFiddle鏈接,因爲問題可以在那裏重新創建。
(首先,我已經看到StackOverflow上這個問題,但答案並不在我的情況下工作:jQuery UI Dialog with ASP.NET button postback)
所需的行爲:
在我的網頁我有兩個一個隱藏字段和一個提交按鈕(通過CSS隱藏)。
我想要做的就是使用JavaScript以編程方式單擊此按鈕,從而導致表單被提交。最重要的是....我想從一個jQuery UI對話框中觸發所有這些。基本上,用戶將在jQuery UI對話框中進行選擇,這將導致整個頁面被提交併重新加載。
問題陳述
觸發一個按鈕,點擊這樣正常工作正常提交表單。但是,如果在jQuery UI對話框中觸發操作,則會失敗。
正如你可以在我的jsFiddle代碼中看到的,我在提交按鈕上調用jQuery的click()函數....但實際上並沒有提交表單!該按鈕確實被JavaScript點擊了,但「表單提交行爲」本身不會發生。該頁面未發佈。
我相信jQuery UI對話框以某種方式干擾按鈕的表單提交行爲,我嘗試以編程方式單擊。
我想以編程方式觸發按鈕點擊的原因:
我不能有位於內對話框中的按鈕來提交按鈕本身。就我而言,我創建了一個可重用的JavaScript控件,它包裝了一個jQuery UI對話框。這個JS控件允許用戶選擇一個員工。但是,當員工被選中時,期望的行爲是並不總是:表單提交。 (有時候我可能要在頁面上顯示的挑選員工,而不是執行提交呢。)
其他細節:
這個問題不是特定於ASP.NET,但這裏有一些額外的細節以幫助解釋爲什麼我嘗試所有這些。我正在使用.NET 4.5編寫ASP.NET Web窗體應用程序。我已經開始爲我的頁面使用越來越多的JavaScript,但是在這個特定的頁面上我想觸發一個實際的回發到服務器,這樣我就可以處理ASP.NET頁面生命週期中的按鈕單擊事件並填充GridView。這就是爲什麼我希望能夠使用JavaScript來點擊一個asp:按鈕,這反過來會導致表單提交。
最重要的是......試一試--->參見下面的jsfiddle鏈接.....
同樣,這個問題是不是特定於ASP.NET。我已經能夠使用普通的HTML和jQuery UI在JsFiddle上重新創建相同的問題。這裏是的jsfiddle鏈接:
正如你可以在代碼中看到,我已經嘗試使用移動jQuery UI的對話框通過jQuery DOM操作表單內的「修復」。這似乎沒有解決問題。
謝謝!我感謝任何幫助!
HTML
<html>
<head></head>
<body>
<form action="http://www.google.com/index.html" method="post">
<input type="button" value="Open jQuery dialog" id="btnOpenDialog" />
<br /><br /><br />
The button below submits the form correctly if you click it.<br />
However, when I try to trigger click() event on this button <u>from within the jQuery UI Dialog above</u> then the form <b>fails to be submitted.
</b><br />
<input type="submit" value="Submit Form" id="btnSubmitForm" />
<input type="hidden" id="hdnEmployeeChosen" value="" />
</form>
<div id="divPopup" class="dialogClass" style="display: none;">
Picking an employee below <b>ought to</b> cause the form to submit, but sadly it does not...
<br /><br />
<div class="divOptions">
<input type="button" value="Pick" class="pickButton" employeeName="Weird Al" />
Weird Al Yankovic
</div>
<div class="divOptions">
<input type="button" value="Pick" class="pickButton" employeeName="Dracula" />
Count Dracula
</div>
<div class="divOptions">
<input type="button" value="Pick" class="pickButton" employeeName="David" />
David Copperfield
</div>
</div>
</body>
的JavaScript
$(document).ready(function()
{
var jqueryDialog = $('#divPopup')
.dialog({
autoOpen: false,
modal: true,
title: 'My Dialog',
width: 300,
height: 300,
draggable: false,
resizable: false
});
// This "fix" does not appear to help matters..........
jqueryDialog.parent().appendTo($("form:first"));
$('#btnOpenDialog').click(function() {
jqueryDialog.dialog('open');
});
$('.pickButton').click(function() {
// Put picked value into hidden field
var pickedEmployee = $(this).attr('employeeName');
$('#hdnEmployeeChosen').val(pickedEmployee);
// Try to cause a submit (ASP.NET postback in my case)
// THIS PART DOES NOT WORK.................
$('#btnSubmitForm').click();
//alert($('#hdnEmployeeChosen').val());
});
});
CSS
form {
margin: 5px;
border: 1px solid black;
background-color: #EEE;
padding: 15px 5px;
}
.dialogClass {
border: 1px solid black;
padding: 5px;
margin: 5px;
background-color: LightBlue;
font-size: 14px;
}
.pickButton {
margin-right: 5px;
}
.divOptions {
margin-bottom: 3px;
}
感謝您的回覆。如果你能看到我的評論user1757786的答案。我需要讓按鈕本身觸發表單提交。我知道我可以在表單上處理並手動提交,但這並不理想。我的問題的關鍵是要找出如何使提交按鈕本身的工作。此外,沒有任何代碼需要提交按鈕...其類型='提交',所以它會導致表單提交。嘗試在jsFiddle中手動點擊它並看到它提交。 – ClearCloud8