jQueryは、asp.netボタンonclientClickのダイアログを確認します
質問
gridviewにupdatePanelのテンプレートフィールドがあり、ボタンが呼ばれています btnDelete
. 。標準ではなく OnClientClick="return confirm('Are you sure?')"
jqueryダイアログを使用したいのですが。
これまでのところ、私はjqueryを使用して設定することができます btnDelete.Attributes["onclick"]
jqueryダイアログコードをCode-behindで設定します。ただし、「確認」または「キャンセル」をクリックする機会がある前に、すべての場合にサーバーに投稿します。
これが生成するHTMLです:
<input type="submit" rel="Are you sure?" class="action-link delete" id="ctl00_c1_gvTransfers_ctl02_btnDelete" onclick="return function() {
$('#delete-transfer-confirm').dialog({
buttons: {
'Confirm' : function() { $(this).dialog('close'); return true; },
'Cancel' : function() { $(this).dialog('close'); return false; }
}
});
$('p.message').text($(this).attr('rel'));
$('#delete-transfer-confirm').dialog('open');
};" value="Delete" name="ctl00$c1$gvTransfers$ctl02$btnDelete">
どちらのボタンがクリックされるまで、この関数がブロックされないようになっていることが間違っていることは何ですか?
逆に、標準の確認は正常に機能します:
<input type="submit" class="action-link delete" id="ctl00_c1_gvTransfers_ctl02_btnDelete" onclick="try{if (!window.confirm('Are you sure?')){return false;};}catch(e1){alert("Unexpected Error:\n\n" + e1.toString());return false;};" value="Delete" name="ctl00$c1$gvTransfers$ctl02$btnDelete">
ありがとう、マーク
アップデート:
最終的に、name = ""属性をレンダリングするには、usesubmitbehavior = "false"を使用する必要がありました。次に、onClientClickをオーバーライドし、値を「return」に設定する必要がありました。したがって、デフォルトの__dopostback()は実行されません。その後、.live()クリックハンドラーを配線することができました。
$('input.delete').live('click', function(e) {
var btnDelete = $(this);
alert($(btnDelete).attr('name'));
e.preventDefault();
$('#delete-transfer-confirm').dialog({
buttons: {
'Confirm': function() {
$(this).dialog('close');
__doPostBack($(btnDelete).attr('name'), '');
return true;
},
'Cancel': function() {
$(this).dialog('close');
return false;
}
}
});
$('p.message').text($(this).attr('rel'));
$('#delete-transfer-confirm').dialog('open');
});
解決
例として、この質問について選択した回答を確認してください。 jQuery UIダイアログに「確認」ダイアログを実装する方法は?
いくつかのメモ:
OnClick機能をOnClick属性に配置しないでください。 JQueryの大きな利点の1つは、目立たないJavaScriptを実行できることです。代わりに、次のようなことをします:
$(function() {
$('.delete').click(function(e) {
e.preventDefault() //this will stop the automatic form submission
//your functionality here
});
});
また、クリックイベントの外側にダイアログがインスタンス化されていることを確認してください。そうすれば、最初のクリックイベントが発生する前に初期化されます。だから、このようなことはあなたの結果になるでしょう:
$(function() {
$("#delete-transfer-confirm").dialog({
autoOpen: false,
modal: true
});
$('.delete').click(function(e) {
e.preventDefault();
$('#delete-transfer-confirm').dialog({
buttons: {
'Confirm': function() {
$(this).dialog('close');
return true;
},
'Cancel': function() {
$(this).dialog('close');
return false;
}
}
});
$('p.message').text($(this).attr('rel'));
$('#delete-transfer-confirm').dialog('open');
});
});
それはあなたのためにトリックをするはずです。
他のヒント
$(document).ready(function () {
$('#btnCancel').click(function (e) {
e.preventDefault();
$("<div><span><b>Are you sure you want to cancel this order?</b></span></div>").dialog({
modal: true,
draggable: false,
resizable: false,
width: 430,
height: 150,
buttons: {
"No": function () {
$(this).dialog("destroy");
},
"Yes": function () {
$("#btnCancel").unbind();
$(this).dialog("destroy");
document.getElementById('<%= btnCancel.ClientID %>').click();
}
}
});
});
});
次に、ページ本体で
<asp:button id="btnCancel" runat="server" cssclass="button_major" text="Cancel" style="float: right"
onclick="btnCancel_ClickEvent" clientidmode="Static" />