ورود

View Full Version : عدم اجرای document.ready در ویو لود شده در jQuery dialog



mr.sirwan
سه شنبه 12 تیر 1397, 14:04 عصر
با سلام خدمت دوستان، من میخوام صفحات ایجاد رکورد جدید و ویرایش رکورد رو که قبلا توی page جدا به کاربر نمایش میدادم الان میخوام توی jquery dialog توی صفحه مثلا لیست رکوردها نمایش بدم که فک کنم کاربر پسند تر باشه.
من توی صفحه ایجاد و ویرایش رکورد یه اسکریپت توی document.ready نوشتم که در حالت عادی که صفحه جدا باز بشه کار میکنه و اجرا میشه اما وقتی بخوام این صفحه رو توی page لیست رکوردها داخل jquery dialog باز کنم، تابع document.ready مربوط به صفحه ایجاد رکورد، اجرا نمیشه که خب طبیعی هم هست، چون صفحه لیست رکوردها قبلا لود شده

حالا میخوام راهنمایی کنین که برای حل این مشکل چیکار کنم؟ مثلا مقداردهی های اولیه ای که توی تابع ready قرار دادم چجوری و کجا باید انجام بدم؟

اینم یه عکس از دیالوگ:
148495

اینم سکریپتی که توی صفحه ایجاد رزرو نوشتم و اجرا نمیشه:
$(document).ready(function () {
var d = new Date();
d.setDate(d.getDate() - 0);
var startDay = parseInt(d.getTime());
d.setDate(d.getDate() + 24);
var endDay = parseInt(d.getTime());

$("#ReservedForDate").persianDatepicker({
initialValueType: 'persian',
format: 'YYYY/MM/DD',
autoClose: true,
minDate: startDay,
maxDate: endDay,
onSelect: function () { $("#ReservedForDate").change(); }
});

$("#ReservedForDate").change(function () {
OnChangeDateField();
})

OnChangeDateField();
ToggleTransactionNumField();
});

hakim22
سه شنبه 12 تیر 1397, 14:33 عصر
اول باید مطمئن بشید که کدهای جاوا اسکریپت شما در انتهای صفحه لود میشه. باید در Layout یک Section تعریف کنید و کدهای جاوا اسکریپت هر صفحه رو درون اون Section قرار بدید.
کدهای یک صفحه در ASP درون صفحه ی Layout قرار میگیره و بعد به کاربر ارسال میشه. اگر Section نداشته باشید کد جاوا اسکریپت شما ممکنه قبل از لود صفحه و فایل jQuery لود بشه که حتما خطا میده و درست کار نمیکنه.

برای طراحی این نوع صفحات بهتره از یک فریم ورک مخصوص این کار استفاده کنید. مثلا Vue.js برای اینکار بسیار مناسبه.

mr.sirwan
سه شنبه 12 تیر 1397, 14:57 عصر
section مربوط به سکریپت ها اخر layout قرار داره و داخل صفحه ایجاد رزرو هم اخر صفحه، section رو باز کردم و فایل های سکریپتم داخلش هست، این از layout:


@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/unobtrusive")
@Scripts.Render("~/bundles/bootstrap")
<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
@Scripts.Render("~/bundles/klorofil")
@RenderSection("scripts", required: false)

اینم انتهای فایل View ایجاد رزرو:

@section Scripts{
@Scripts.Render("~/bundles/jqueryval")
<script src="~/Scripts/Admin.js"></script>

<script src="~/Content/pwt.datepicker-master/assets/persian-date.min.js"></script>
<script src="~/Content/pwt.datepicker-master/dist/js/persian-datepicker.min.js"></script>
}


این نکته رو هم بگم که بقیه سکریپت های موجود توی فایل admin.js (همین فایلی که سکریپت هام رو توش نوشتم توی صفحه ایجاد رزرو) کار میکنن فقط بخش document.ready کار نمیکنه

hakim22
سه شنبه 12 تیر 1397, 15:32 عصر
بهترین کار اینه که اسکریپت رو دیباگ کنید. با F12 در کروم میتونید خط به خط مسیر اجرای اسکریپت رو دنبال کنید.

درون اسکریپت یک Log یا Alert قرار بدید ببینید اجرا میشه یا نه

mr.sirwan
سه شنبه 12 تیر 1397, 15:42 عصر
ببینید شاید من منظور و قصدم رو کامل نرسوندم، من وقتی بخوام این ویوی ایجاد رزرو رو بصورت جداگانه یعنی داخل یه صفحه دیگه بصورت مجزا باز کنم همه چی اوکیه مشکلی در اجرای سکریپت ها وجود نداره، ولی وقتی میخوام همون صفحه یا ویو رو بیارم توی jquery dialog نمایش بدم فقط سکریپت مربوط به document.ready صفحه ایجاد رزرو کار نمیکنه بقیه سکریپت ها کامل کار میکنن.

به نظرم دلیلیش هم اینه که من که دارم ویوی ایجاد رزرو رو از توی ویوی لیست رزروها داخل دیالوگ باز میکنم، خب قبلا document.ready اجرا شده چون ویوی لیست رزرو ها قبلا لود شده

سکریپت رو دیباگ کردم، وقتی دیالوگ رو باز میکنم بخش document.ready مربوط به ویوی ایجاد رزرو اجرا نمیشه

mr.sirwan
سه شنبه 12 تیر 1397, 17:10 عصر
یه نکته ای هم که الان متوجه ش شدم اینه که وقتی برای ویوی ایجاد رزرو بالای ویو پراپرتی layout مشخص میکنم و از طریق صفحه لیست رزروها دیالوگ رو باز میکنم، سکریپت document.ready کار میکنه ولی وقتی پراپرتی layout رو برابر با null قرار میدم (که باید برابر null باشه تا چیز اضافه ای به ویو اضافه نشه) و دیالوگ رو باز میکنم document.ready ویوی ایجاد رزرو از کار میوفته

دلیلش چیه؟ :متفکر:

mr.sirwan
پنج شنبه 14 تیر 1397, 23:21 عصر
مشکل حل شد، به خاطر این که layout رو برابر نال قرار میدادم، دیگه این ویو یک صفحه html محسوب نمیشد و استایل ها و سکریپتها براش کار نمیکردن (بعضی وقتا علت ها انقد سادن که اصلا فکرمون سمتشون نمیره)، برای حل مشکلش اومدم یه layout خالی ایجاد کردم که با layout اصلیم تداخلی ایجاد نکنه و توی اون layout براش section های script و style رو تعریف کردم و توی ویو داخل این سکشن ها فایل های مورد نیاز رو اضافه کردم

تشکر از همراهیتون