majid_darab
دوشنبه 06 تیر 1390, 20:01 عصر
با سلام و عرض خسته نباشید خدمت دوستان محترم :
نکته ای که می خوام خدمتتون عرض کنم موردی ست که در یکی از پروژه های خود به آن برخورده ام.
قضیه از این قرار است که دنبال نوشتن ولیدیتورهای فرم سمت کلاینت با جی کویری بودم و مکانیزم کار به این صورت می باشد که هنگام کلیک یک دکمه از فرم می بایست ابتدا ولیدیتورهای جی کویری سیستم را موشکافی کنند و در صورت داشتن ارور ، ارورها را در یک div به صورت modal به کاربر نشان دهند و
این در حالی ست که هیچ گونی پست بکی در اینجا نباید اتفاق بیفتد. چرا ؟ چون مدال میاد و میره!
پس از اینکه page ولید شد آنوقت پست بک باید اتفاق بیفتد که ما در اینجا کدهای سرورساید دکمه را لازم داریم ...
خوب مشکلی که عنوان خواهم نمود در مورد دکمه های معمولی دات نت و دکمه های html وجود ندارد و این مشکل در مورد linkbutton و anchor پدیدار شده است.
دکمه ای که من در فرم می خواهم استفاده کنم بنا به دلایل دیزاینی باید از لینک باتن استفاده نماید که من برای به چالش کشیدن این قضیه دکمه را با المنت a اچ تی ام ال طراحی کردم.
دکمه به صورت زیر است :
<div id="btnPaymentContainerInside">
<p id="PaymentParag">
<a id="PaymentLink" onclick="SubmitForm();" name="PaymentLink" runat="server"
onserverclick="PaymentLink_Click" title="پرداخت"></a>
</p>
</div>
خوب همان طور که گفتم ما به کدهای سرورساید دکمه پس از ولید بودن page نیاز داریم.
برای همین من runat="server" و "onserverclick="PaymentLink_Click رو به دکمه اضافه کردم...
پس وقتی این دکمه (منظور شبه دکمه با anchor) کلیک می شود عمل پست بک صورت می گیرد و ما به کدهای سرورساید دکمه دسترسی داریم.
نکته ای که دراینجا وجود داره اینه مگر نباید با هر بار پست بک شدن فرم عمل submit فرم هم اتفاق بیفتد یا بالعکس.
این قضیه در مورد دکمه ی مورد نظر ما عمل نمی کند ...
اما چگونه آن را تست کردم!
با کد زیر :
$(function () {
$('#form1').submit(function (e) {
alert('this is submit form1');
این آلرت در مورد دکمه های معمولی عمل می کند یا دکمه های html ، اما در مورد لینک باتن و یا المنت a نه.
برای همین کد زیرو به شبه دکمه اضافه کردم :
onclick="SubmitForm();"
function SubmitForm() {
$('#form1').submit();
}
خوب حالا هم submit form را داریم هم پست بک
اما حالا برای اینکه وقتی ولیدیتورها اروری پیدا کردند جلوی پست بکو بگیریم کد زیرو نوشتم :
$(function () {
$('#form1').submit(function (e) {
alert('this is submit form1');
if (error[0]) {
ErrorsInsideMessageBox.append(FormMessages.html()) ;
showErrorDiv();
e.preventDefault();
}
});
});
قسمت
e.preventDefault(); در مورد دکمه های معمولی به خوبی کار می کند ، اما در مورد دکمه ی شبیه سازی شده ی ما همچنان پست بک اتفاق می افتد.
خلاصه که من متوجه نشدم :
1-چرا submit پس از سرور ساید کردن شبه دکمه اتفاق نیفتاد و فقط پست بکو داشتیم.
2-چرا
e.preventDefault(); رو شبه دکمه عمل نمی کند و چگونه می توان این مشکلو مرتفع نمود؟
با تشکر از حسن توجه شما دوستان عزیز و گرامی
نکته ای که می خوام خدمتتون عرض کنم موردی ست که در یکی از پروژه های خود به آن برخورده ام.
قضیه از این قرار است که دنبال نوشتن ولیدیتورهای فرم سمت کلاینت با جی کویری بودم و مکانیزم کار به این صورت می باشد که هنگام کلیک یک دکمه از فرم می بایست ابتدا ولیدیتورهای جی کویری سیستم را موشکافی کنند و در صورت داشتن ارور ، ارورها را در یک div به صورت modal به کاربر نشان دهند و
این در حالی ست که هیچ گونی پست بکی در اینجا نباید اتفاق بیفتد. چرا ؟ چون مدال میاد و میره!
پس از اینکه page ولید شد آنوقت پست بک باید اتفاق بیفتد که ما در اینجا کدهای سرورساید دکمه را لازم داریم ...
خوب مشکلی که عنوان خواهم نمود در مورد دکمه های معمولی دات نت و دکمه های html وجود ندارد و این مشکل در مورد linkbutton و anchor پدیدار شده است.
دکمه ای که من در فرم می خواهم استفاده کنم بنا به دلایل دیزاینی باید از لینک باتن استفاده نماید که من برای به چالش کشیدن این قضیه دکمه را با المنت a اچ تی ام ال طراحی کردم.
دکمه به صورت زیر است :
<div id="btnPaymentContainerInside">
<p id="PaymentParag">
<a id="PaymentLink" onclick="SubmitForm();" name="PaymentLink" runat="server"
onserverclick="PaymentLink_Click" title="پرداخت"></a>
</p>
</div>
خوب همان طور که گفتم ما به کدهای سرورساید دکمه پس از ولید بودن page نیاز داریم.
برای همین من runat="server" و "onserverclick="PaymentLink_Click رو به دکمه اضافه کردم...
پس وقتی این دکمه (منظور شبه دکمه با anchor) کلیک می شود عمل پست بک صورت می گیرد و ما به کدهای سرورساید دکمه دسترسی داریم.
نکته ای که دراینجا وجود داره اینه مگر نباید با هر بار پست بک شدن فرم عمل submit فرم هم اتفاق بیفتد یا بالعکس.
این قضیه در مورد دکمه ی مورد نظر ما عمل نمی کند ...
اما چگونه آن را تست کردم!
با کد زیر :
$(function () {
$('#form1').submit(function (e) {
alert('this is submit form1');
این آلرت در مورد دکمه های معمولی عمل می کند یا دکمه های html ، اما در مورد لینک باتن و یا المنت a نه.
برای همین کد زیرو به شبه دکمه اضافه کردم :
onclick="SubmitForm();"
function SubmitForm() {
$('#form1').submit();
}
خوب حالا هم submit form را داریم هم پست بک
اما حالا برای اینکه وقتی ولیدیتورها اروری پیدا کردند جلوی پست بکو بگیریم کد زیرو نوشتم :
$(function () {
$('#form1').submit(function (e) {
alert('this is submit form1');
if (error[0]) {
ErrorsInsideMessageBox.append(FormMessages.html()) ;
showErrorDiv();
e.preventDefault();
}
});
});
قسمت
e.preventDefault(); در مورد دکمه های معمولی به خوبی کار می کند ، اما در مورد دکمه ی شبیه سازی شده ی ما همچنان پست بک اتفاق می افتد.
خلاصه که من متوجه نشدم :
1-چرا submit پس از سرور ساید کردن شبه دکمه اتفاق نیفتاد و فقط پست بکو داشتیم.
2-چرا
e.preventDefault(); رو شبه دکمه عمل نمی کند و چگونه می توان این مشکلو مرتفع نمود؟
با تشکر از حسن توجه شما دوستان عزیز و گرامی