jQueryダイアログの問題があります。人がcalDayContentEntry divをクリックすると、ajaxを利用してダイアログウィンドウ内のカレンダーコンテンツをレンダリングしたいと考えています。次のコードは、最初のクリックで動作しますが、ダイアログを閉じた後、そのエントリを再び表示するダイアログが表示されなくなりました。他のエントリも最初に動作しますが、セカンダリクリックはダイアログを再び開きません。jQueryダイアログで最初に表示されるのは
ここで問題が発生している関連コード(すべて同じasp.net mvc 3カミソリビュー内)です。誰にもこの問題を修正できる調整がいくつかありますか?
...
<div class="calDayContent">
@foreach (var content in day.Contents)
{
<div class="calDayContentEntry">
<input type="hidden" value="@content.Entry.Id" class="hiddenId" />
<div class="@content.DisplayClass">@content.Entry.Hours.ToString() hrs</div>
</div>
<div class="leaveRequestPopup"></div>
}
</div>
...
<script type="text/javascript">
$().ready(function() {
$('.calDayContentEntry').click(function() {
getAndShowDialogContents(this);
});
// Register close event for dialog if overlay is clicked
$('.ui-widget-overlay').live("click", function() {
//Close the dialog
$currentDialog.dialog("close");
});
});
function getAndShowDialogContents(entryDiv) {
var entryId = $(entryDiv).find('input[type="hidden"]').val();
var contentdiv = $(entryDiv).next('.leaveRequestPopup');
var x = $(entryDiv).position().left + jQuery(entryDiv).outerWidth();
var y = $(entryDiv).position().top - jQuery(document).scrollTop();
$.ajax(
{
type: 'POST',
url: 'Request/GetCalendarDetails',
data: { id: entryId },
success: function (result) {
$(contentdiv).html(result);
$(contentdiv).dialog({
autoOpen: false,
modal: true,
title: 'Details',
width: 400,
height: 300,
draggable: false
});
$(contentdiv).dialog("option", "position", [x, y]);
$currentDialog = $(contentdiv).dialog('open');
}
});
}
</script>
このケースではグローバルなvarなので、範囲に入ります。まだやっていることは良いことではありません。 –
jQueryで使用する正しいsintaxを説明しました –
グローバル変数を使用するので、ユーザーがページをどこでもクリックしてダイアログを閉じることができるオーバーレイがクリックされたときにダイアログにアクセスできます。これを行うより良い方法がある場合は、私に知らせてください。私はこの問題に私の解決策を掲載しました。もしあなたがその解決策でグローバル変数の使用法を修正できれば、それは高く評価されるでしょう、私は方法を知らないだけです。 –