私はASP.NET MVCプロジェクトに取り組んでおり、実行する前にカスタム属性を持つすべてのリンクにカスタムの確認ボックスを表示したいと思います。
これらのリンクは、このような異なるdata-ajax-success
属性を持つajax
リンクすることができます。したがって、私は待つことができるだろう方法をご希望の実行前にリンククリックでポップアップ結果を待つ
<a href="/OtherController/OtherAction/3ebdb11e-7994-424c-9818-6c577e56c7af"></a>
:
<a data-ajax="true" data-ajax-failure="OnAjaxError" data-ajax-method="POST" data-ajax-success="OnAjaxSuccess(data, "updatePanel")" href="/Controller/Action/2cda26be-e6d9-416b-ae5a-ec85280fb1da"></a>
またはこのような単純なリンクポップアップの結果を確認し、正しいパラメータ(特にajaxリンクの場合はdata-ajax-success
とdata-ajax-failure
)を指定して実行を続けます。
は、私は、これはそのような何かのように見えると思います:
$(document.body).on('click', 'a[data-confirmation]:not([data-confirmation=""]), *[data-confirmation]:not([data-confirmation=""]) a',
function (event) {
//pause the event
ShowYesNoPopup("My title", "My content",
function() {
//continue event
},
function() {
event.preventDefault();
return false;
}
);
}
);
ShowYesNoPopup
で:
function ShowYesNoPopup(title, content, yesCallback, noCallback) {
$("#popupOuterContainer").empty();
$('<div id="popupContainer"></div>').dialog({
modal: true,
appendTo: "#popupOuterContainer",
closeText: '',
buttons:{
"yes":{
text:'Ok',
click: function() {
$(this).dialog("close");
yesCallback();
}
},
"no":{
text:'Cancel',
click: function() {
$(this).dialog("close");
noCallback();
}
}
},
create: function (event, ui) {
$("body").css({ overflow: "hidden !important" })
},
beforeClose: function (event, ui) {
$("body").css({ overflow: '' })
},
open: function (event, ui) {
$(".ui-dialog-title").html(title);
$(this).html(content);
}
});
}
私はこのテーマに関する話題をたくさん読みますが、この特定の状況で働くものを見つけることができませんでした。私はポップアップを呼び出す前に伝播を阻止しようとしましたが、ポップアップで再びイベントを呼び出すことができませんでしたボタン... これは不可能であり、JavaScriptのconfirm
はそれを実現する唯一のオプションでした。
この場合、方法はありますか?何か不足していますか?
ありがとうございます。
UPDATE
$(document.body).on('click', 'a[data-confirmation]:not([data-confirmation=""]), *[data-confirmation]:not([data-confirmation=""]) a',
function (event) {
event.preventDefault();
if (should_do_ajax) {
func_callback = function() {
var url = $(this).attr('href');
var successCallback = $(this).data("ajax-success");
var failureCallback = $(this).data("ajax-failure");
$.ajax({
type: "POST",
url: url,
success: //what should I put here ? Because successCallback I retrieved from the link is a string, not a real function I think
error: //same issue
});
}
} else {
func_callback = function() {
link = $(this).attr('href');
window.location = link;
}
}
ShowYesNoPopup("My title", "My content",
func_callback,
function() {
return false;
}
);
}
)。そのあなたのケースで(あなたのアクションのデフォルトの動作がトリガされます -
答えていただきありがとうございます:)私は実際にこのようないくつかのソリューションを読んでいますが、私は正確にajaxリンクに適合させることは知らないのです。どのように 'yesCallback'を書いて、リンクがajaxのものであればajax' success'と 'failure'が正しく呼び出されることを確かめましたか? –
関連する例で答えを更新しましたが、今はもっと明確です。 – Dekel
ありがとう、あなたのことはとても親切です。私は 'should_do_ajax'と何をするべきかを知っていると思いますが、私の最後の質問は' success'と 'failure'コールバックを呼び出す方法です。なぜなら' $(これは).data( "ajax-success") 'は文字列になります、間違っていますか?とにかくそれを呼び出す方法はありますか? –