PDA

View Full Version : اجرای click یک کلید بعد از گرفتن تااید از یک جاوا اسکریپ



سید مسعود موحد
چهارشنبه 27 دی 1385, 17:08 عصر
با سلام خدمت دوستان عزیز

اگر من بخواهم که کلید delete برای حذف یک رکور بگذارم چطور میتوانم با یک اسکریپت ابتدا تایید بگیرم سپس دستور حذف را صادر کنم من میخوام از کلید هایی که سرور سایت هستن استفاده کنم چطور میتونم در این نوع کلیدها بگویم اگر تابعی که در OnClientClick صدا میزنم اگر کلید تایید را زده است آنگاه خود click کلید اجرا شود

یا به طور واضح تر من میخوام نتیجه تابع confirm را در click کلید خود داشته باشم

mrvakil
چهارشنبه 27 دی 1385, 19:13 عصر
function DeleteBox (Object)
{
if (confirm('آیا عمل حذف صورت گیرد'))
{
Object.click ();
}
returnfalse;
}

اینجوری هم صدا زده میشه(در داخل تگ asp:button):

onmousedown="DeleteBox(this)"

سید مسعود موحد
چهارشنبه 27 دی 1385, 20:35 عصر
دوست عزیز دستت درد نکنه ولی وقتی که کد بالا را در رویداد OnClientClick قرار میدهم درست کار نمیکند و در هر حالت click کلید را اجرا میکند (کلید من از نوع ASP است نه از نوع HTML )
ولی وقتی که در رویداد onmousedown قرار میدهم درست کار میکند چرا
کدهای اشتباه و درست را برای شما در زیر مینویسم
کدی که درست کار نمیکند

<asp:Button ID="Button1" runat="server" Text="Button" onmousedown="DeleteBox(this)" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="False" /><br />


و کدی که درست کار میکند


<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="DeleteBox(this)" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="False" /><br />

سید مسعود موحد
شنبه 30 دی 1385, 14:54 عصر
دوست عزیز mrvakil
این دستور را هم که در مستر پیج قرار دادم بازم کار نکرد نمیدانم چرا بعد دستور زیر هم وقتی از صفحه معمولی استفاده میکنم کار میکند ولی در مستر پیج کار نمیکند

document.getElementById("Label1").innerText = ""

Arvin Soft
شنبه 30 دی 1385, 15:28 عصر
ببخشید شاید سوالم اینجا یه کمی نامربوط باشه،
من به GridView یه TemplateField بصورت زیر اضافه کردم تا موقع کلیک دکمه Delete از کاربر Confirm بگیرم و بعد اگه تایید کرد اون رکورد رو حذف کنم:

<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDelete" Text="حذف شماره" runat="server"
OnClientClick="return confirm('آیا از حذف کامل اطلاعات این تماس مطمئنید؟');"
CommandName="Delete" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="False"/>
</ItemTemplate>
</asp:TemplateField>فقط نمی دونم چرا وقتی پیام ظاهر می شه، جواب هر چی باشه، (OK یا Cancel) رکورد حذف می شه.:ناراحت:
ممنون می شم اگه بگین چطوری و کجا باید مشخص کنم که دستور Delete رو که اینجا درقالب یه StoredProcedure اجرا میشه، فقط زمانی اجرا کن که دکمه OK زده بشه.

rezaei manesh
شنبه 30 دی 1385, 16:37 عصر
با سلام خدمت دوست عزیز
آقا با توجه به این که می دونم شما برنامه آقای راد رو در مورد گراید ویو دارید جوابتون رو می دم
شما اول اون فایل Grid.js رو به پروژه تون اضافه کنید .
بعد در این قسمت از مستر پیج کد زیر رو قرار بدین


<%@ Master Language="VB" CodeFile="AdminMasterPage.master.vb" Inherits="AdminMasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>seven sits</title>
<script src="../Grid.js"language="javascript" type="text/javascript" ></script>
</head>

بعد در contentPage در فرم لود اون این کد رو بذار


ButtDel.OnClientClick = "return confirmDelete();"

خوب حالا می مونه گرید تون و عملیات پرکردن تون که اگه مانند جناب راد پر کنید مشکلی پیش نمیاد
امتهان کنید اگه مشکلی بود به من خبر بدین

سید مسعود موحد
شنبه 30 دی 1385, 16:44 عصر
ببخشید شاید سوالم اینجا یه کمی نامربوط باشه،
من به GridView یه TemplateField بصورت زیر اضافه کردم تا موقع کلیک دکمه Delete از کاربر Confirm بگیرم و بعد اگه تایید کرد اون رکورد رو حذف کنم:

<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnDelete" Text="حذف شماره" runat="server"
OnClientClick="return confirm('آیا از حذف کامل اطلاعات این تماس مطمئنید؟');"
CommandName="Delete" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="False"/>
</ItemTemplate>
</asp:TemplateField>فقط نمی دونم چرا وقتی پیام ظاهر می شه، جواب هر چی باشه، (OK یا Cancel) رکورد حذف می شه.:ناراحت:
ممنون می شم اگه بگین چطوری و کجا باید مشخص کنم که دستور Delete رو که اینجا درقالب یه StoredProcedure اجرا میشه، فقط زمانی اجرا کن که دکمه OK زده بشه.
دوست عزیز اگر شما مثل من از مستر پیج استفاده نمیکنید و مشکل مرا ندارید بجای قرار دادن اسکریپ خود در اونت فوق از اونت onmousedown استفاده کنید من تست کردم و جواب گرفتم

Arvin Soft
شنبه 30 دی 1385, 17:02 عصر
ببخشید آقای موحد منظورتون کدوم OnMouseDown هست؟ می خواین بگین باید OnClientClick رو کلا از قسمت تعریف گرید بردارم؟ کجا بذارمش؟
آخه من هرکجا گشتم روی نت، دیدم برای گرفتن تایید موقع Delete در GridView از همین روش استفاده شده دقیقا. اینجا (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/GridViewEx.asp) رو ببینید. نمونه کدهایی برای کار با GridView هست که می تونید VB ش رو از اینجا دانلود کنید (http://download.microsoft.com/download/d/0/5/d054c035-9e12-4e17-b452-9e9e322612bd/msdngridviewvb.msi). در اونها هم از همین روش استفاده شده. ولی نمی دونم اشکال کار کجاست که اونجا هم در هر صورت سطر داده حذف می شه.:ناراحت:
اینجا رو ببینید: + (http://msdn2.microsoft.com/en-us/library/ms972940.aspx)
من هم دقیقا همین کار رو کردم ولی نمی شه.:اشتباه:

rezaei manesh
شنبه 30 دی 1385, 17:06 عصر
در فرم لود اون این کد رو بذار


ButtDel.OnClientClick = "return confirmDelete();"



جای confirmDelete می تونید همون کد خودتون رو بذارید یا اینکه کدتون رو کاملترکنید و اونو تویه یه تابع بذارید.

Arvin Soft
شنبه 30 دی 1385, 17:12 عصر
آقای رضایی منش، این ButtDel شما کجاست؟ خب در سوال من در هر سطر گرید یکی از این دکمه ها هست. و من با این دستور:

<asp:Button ID="btnDelete" Text="حذف شماره" runat="server"
OnClientClick="return confirm('آیا از حذف کامل اطلاعات این تماس مطمئنید؟');"
CommandName="Delete" CausesValidation="False" EnableViewState="False" UseSubmitBehavior="False"/>
در واقع دارم همین کاری رو انجام میدم که شما گفتید و کار هم می کنه. فقط موضوع اینه که باید یه جوری و یه جایی بهش حالی کنم که اون دکمه OK اگه زده شد فرمان Delete رو اجرا کن و درغیر اینصورت بی خیال شو! مسئله اینست فعلا عزیز جان.:لبخندساده:

rezaei manesh
شنبه 30 دی 1385, 17:30 عصر
من فکر کردم که شما یک دکمه برای حذف دارید نه اینکه به ازای هر رکورد یک دکمه
اما برای این کار م تونید از کد زیر استفاده کنید


Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
If (e.Row.RowType = ListItemType.Item) Or (e.Row.RowType = ListItemType.AlternatingItem) Then
Dim ButtDel As Button = CType(e.Row.Cells(6).Controls(1), Button)
ButtDel.OnClientClick = "return confirmDelete();"

End If
End Sub

یه تستی بزنید.

Arvin Soft
شنبه 30 دی 1385, 19:09 عصر
فکر می کنم از روش شما هم بشه. توی سایت CodeProject در این رابطه یه مقاله (http://www.codeproject.com/aspnet/GridViewConfirmDelete.asp) هست که بجای RowCreated از RowDataBound استفاده کرده. راستش به نظرم اینطوری یه کم کار دشوار می شه و اگه بشه به همون شکل یه طوری حلش کرد بهتر باشه.:لبخند: چون من الان مثلا یه SP برای اینکار دارم توی بانک بنام PersonDelete که فعلا خیلی راحت دارم اول گرید بعنوان DeleteCommand معرفیش می کنم.

DeleteCommand="PersonsDelete"
اما اگه بخوام از این راه برم، باید بشینم براش کد بنویسم.

rezaei manesh
شنبه 30 دی 1385, 19:39 عصر
روش من فقط هر موقع دکمه حذف زده شد اول پیغام می ده و بعد اگه ok بود postback میشه و کارها رو طبق رول ادامه می ده فرقی نمی کنه کارها چی باشند . اما برای امتهان با همون روش تون یک بار جای تابع حذف false رو بزار ببین باز هم دکمه حذف کار می کنه اگه باز حذف شد مشکل از جای دیگه باید باشه