ورود

View Full Version : مشکل در طراحی confirm



meisamphp
دوشنبه 09 اردیبهشت 1392, 13:30 عصر
سلام ..

دوستام من یه قسمت وب سایتم می خوام یه confirm درست کنم به صورت کاملا custom ..

کد های زیر رو برای confitm برای پاک کردن یه سطر از دیتا بیس نوشتم ..



function deletion (s,id,k,d,sn){
if ( confirmbox('Are You Sure ?') == true ){
// Deletion By Ajax
}
}
function confrmbox (msg){
$('#contex').html(msg);
$('#lightbox-confirm').fadeIn(100);
$('#conok').click(function(){
$('#lightbox-confirm').fadeOut(100);
return true;
});
$('#concancel').click(function(){
$('#lightbox-confirm').fadeOut(100);
});
}

<html>
<div id="lightbox-confirm">
<div id="context" class="right" style="width:100%; height:30px; font-weight:bolder; font-size:11px; text-align:center ; line-height:1em" dir="rtl"></div>
<div id="conok" class="right" style="height:40px; width:50%; text-align:center">ok</div>
<div id="concancel" class="right" style="height:40px; width:50%; text-align:center">cancel</div>
</div>



اما وقتی روی ok کلیک میکنم هیچ اتفاقی نمی افته ..

ممنون میشم کمکم کنید ..




یاعلی ..

plague
دوشنبه 09 اردیبهشت 1392, 19:25 عصر
برداشتت از طرز کار کد اشتباهه
در بیشتر موارد کد های جاوا اسکریپ به صورت Noneblock یا asynchronous اجرا میشن مگر اینکه شما بهش بگید که اینجوری نباشه
به زبون ساده بخام بگم

در زبون های syncro مثل php کد خط به خط اجرا میشه و هر خط منتظر میمونه تا خط قبلی اجرا بشه وبعد خط بعدی رو اجرا میکنه
ولی جا وا اسکریپت async هستش , این یعنی اینکه وقتی که فانکشن شما اجرا میشه قسمت هایی داره که به صورت آنی اجرا نمیشن
مثل رویداد کلیک و یا درخواست ایجکس
که یا نیاز به رویداد هستن (مثل کلیک ) یا طول میکشه تا اجرا بشن (مثل درخواست ایجکس که طول میکشه تا بره و نتیجش برگرده )

جاوا اسکریپت منتظر اینها نمیمونه بلکه از روشون میپره و فانکشن رو به پایان میرسونه و پردازش این قسمت ها رو به فانکشن داخلی خوده اون قسمت میسپاره

شما فانکشنت اجرا میشه وهیچ چیزی رو برنمیگردونه ! وقتی روی دکمه کلیک میکنی اون true به فانکشن داخلی رویداد کلیک فرستاده میشه نه اون آقایی که از اول confirmbox رو فراخانی کرده


کد ایجکس دیلیت رو توی رویداد click بزار

meisamphp
دوشنبه 09 اردیبهشت 1392, 22:10 عصر
مرسی دوست عزیز ..

آخه من میخواستم از این تابع confirmbox جاهای دیگه هم بجز deletion استفاده کنم ..

چطوری میتون فانکشنمو تو انتظار یه مقدار بازگشتی نگه دارم ؟؟

کد زیر رو هم امتحان کردم جواب داد اما یه مشکل داشت ..


function deletion (s,id,k,d,sn){
if ( confirmbox('Are You Sure ?') , function (data){
If ( data == true ) {
// Deletion By Ajax
}
})
}
function confirmbox (msg,ret){
$('#contex').html(msg);
$('#lightbox-confirm').fadeIn(100);
$('#conok').click(function(){
$('#lightbox-confirm').fadeOut(100);
return ret(true);
});
$('#concancel').click(function(){
$('#lightbox-confirm').fadeOut(100);
});
}

<html>
<div id="lightbox-confirm">
<div id="context" class="right" style="width:100%; height:30px; font-weight:bolder; font-size:11px; text-align:center ; line-height:1em" dir="rtl"></div>
<div id="conok" class="right" style="height:40px; width:50%; text-align:center">salam</div>
<div id="concancel" class="right" style="height:40px; width:50%; text-align:center">salam</div>
</div>


در کل صفحه جوری هست که جلوی هر رکورد یه دکمه هست و وقتی کاربر روی دکمه کلیک میکنه اطلاعات مربوط به اون رکورد فرستاده میشه به فانکشن deletion ..
مشکل اینجاست وقتی که کاربر برای بار اول ok رو میزنه عملیات delet انجام میشه ,, اما وقتی برای بار دوم کلیک میکنه تابع deletion از قسمت true به بعد ۲بار اجرا میشه و بار اول یه بار دیتاهای قبلی رو میفرسته به ajax و بعد دیتاهای مربوط به سری جدید رو ،، و همین طور برای بار سوم که کاربر کلیک میکنه فانکشن deletion سه بار اجرا میشه ..

به نظر شما مشکل کجاست ؟؟

مرسی که کمکم میکنید ..


یاعلی ..

plague
دوشنبه 09 اردیبهشت 1392, 22:43 عصر
بدون دیدن کد نمیشه گفت مشکل از کجاست

الان شما با فشردن دکمه تابع deletion رو فراخانی میکنی و از دل این تاب میای کانفریم میکنی به مشکل برمیخوری
راهش اینه که با فشردن هر دکمه اول تاب کانفیرم رو اجرا کنی بعد از دل کانفیرم (همون رویداد کلیکش ) تابع دلیت رو اجرا کنی

meisamphp
سه شنبه 10 اردیبهشت 1392, 10:07 صبح
سلام دوست عزیز ..

واقعا ًمرسی که کمکم میکنین .. میشه یه نگاه به کد زیر بندازین ؟؟ و اجراش کنید ؟؟


من کد زیر رو نوشتم .. کل کد به همین شکل هستش ..



<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>

<script>
function deletion(){
confirmbox(function(data){
alert (data);
});

}
function confirmbox(ret){
$('#confirmbody').fadeIn();

$('#btnok').click(function(){
$('#confirmbody').fadeOut();
return ret(true);
})
$('#btnko').click(function(){
$('#confirmbody').fadeOut();
return ret(false);
})
}
</script>
<html>
<div id="confirmbody" style="display:none;">
<input class="button" id="btnok" type="submit" value="ok" style="width:100px ; height:40px;">
<input class="button" id="btnko" type="submit" value="ko" style="width:100px ; height:40px;">
</div>
<input class="button" id="bt" onclick="deletion()" type="submit" value="run" style="width:100px ; height:40px;">



وقتی اولین بار روی دکمه ها کلیک میکنم همه چی درست هستش ،، اما برای بار دوم پیغام alert دوبار اجرا میشه و بار سوم سه بار ؟؟ و ...


ممنون میشم کمکم کنید .. مرسی




یاعلی ..

jalil_gh
سه شنبه 10 اردیبهشت 1392, 14:14 عصر
شما هر بار که که تابع confirmBox رو فراخوانی میکنید event مربوط به click به دکمه ok دوباره اضافه میشه. شما کاری که میتونید بکنید اینه که اول رویداد click رو به اصطلاح unbind کنید. شما کافیه کداتونو اینجوری اصلاح کنید

$('#btnok').off('click').click(function(){
$('#confirmbody').fadeOut();
})
$('#btnko').off('click').click(function(){
$('#confirmbody').fadeOut();
})


این از این.

اگه بخاییم کد رو یکمی بهتر کنیم میتونیم از این روش استفاده کنیم
function confirmbox(message, onOK, onCancel) {

// add message to your #confirmbody
// $('<p>').text(message).prependTo('#confirmbody');

$('#confirmbody').fadeIn();

$('#btnok').off('click').click(function(){
$('#confirmbody').fadeOut();
onOK();
});

$('#btnCancel').off('click').click(function () {
$('#confirmbody').fadeOut();
onCancel();
});
}
حالا شما میتونید به این صورت از این کد استفاده کنید.
confirmbox('Are you sure?', function () {
// Do these things when ok clicked
}, function () {
// Do these things when cancel clicked
});

البته باز هم میشه این قطعه کد رو ارتقا داد.

meisamphp
سه شنبه 10 اردیبهشت 1392, 14:47 عصر
سلام ..

لطف بزرگی در حق من کردین دوست عزیز ..


یاعلی ..

Saber_Fatholahi
چهارشنبه 11 اردیبهشت 1392, 00:02 صبح
سلام
البته نگاهی هم به این لینک (http://www.dotnettips.info/post/1024/%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-alert-confirm-prompt-%D9%87%D8%A7%DB%8C%DB%8C-%D9%85%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A8%D8%A7-jquery-impromptu)بندازین جالبه
موفق وموید باشید