PDA

View Full Version : سوال: برسی ورود کاراکتر جدید به textbox



baran_mehr
جمعه 21 آبان 1389, 11:40 صبح
سلام
دوستان میخواستم ببینم چطور باید متوجه بشم که یک کاراکتر به textbox اضافه شده تا عمل خاصی رو انجام بدم؟

majnun
جمعه 21 آبان 1389, 12:28 عصر
میتونید برای تکست باکس رویداد TextChanged بزارین

هربار که رویداد اتفاق بیوفته یعنی اینکه چیزی بهش اضافه یا کم شده

حالا اگه فقط میخوای اضافه بشه باید طول رشته درون تکست باکس را چک کنید

baran_mehr
جمعه 21 آبان 1389, 12:35 عصر
دوست عزیز این که مشخصه این رویداد برای چی هست
مشکل اینجاست که باید صفحه رفرش بشه تا بتونم برسی کنم که ایا اضافه شده یا نه
من میخوام بدون رفریش صفحه اگر چیزی وارد شد متوجه بشم

majnun
جمعه 21 آبان 1389, 12:39 عصر
میشه با جاوااسکریپت از رویداد سمت کلاینت OnTextChanged هم استفاده کرد ...

baran_mehr
جمعه 21 آبان 1389, 13:24 عصر
به چه صورت؟
من چندان جاوا کار نمیکنم ممنون میشم کد بزارید

Kia_MLS
جمعه 21 آبان 1389, 14:53 عصر
دوست عزیز این که مشخصه این رویداد برای چی هست
مشکل اینجاست که باید صفحه رفرش بشه تا بتونم برسی کنم که ایا اضافه شده یا نه
من میخوام بدون رفریش صفحه اگر چیزی وارد شد متوجه بشم

با جاوا اسکریپت میشه:



<%@ Page Language="C#‎‎" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MyPrj.WebForm1" %>

<!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 runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">

<div>
<asp:TextBox runat="server" ID="MyTxt" onkeyup="TextChange(this)"></asp:TextBox>
</div>
</form>
<script language="javascript">
function TextChange(txt) {
alert('Text changed to: ' + txt.value);
}

</script>

</body>
</html>

baran_mehr
جمعه 21 آبان 1389, 15:16 عصر
ممنون دوست عزیز
حالا چطور باید این مقدار رو پاس بدم تو برنامه و بگم ازش اسفاده کنه؟
چون دستوراتم تو html نمیخوام بنویسم سمت سرور میخوام بنویسم

alonemm
جمعه 21 آبان 1389, 15:36 عصر
شما بهتره اين شي تكس باكس رو داخل يك UpdatePanel استفاده كنيد و از رويداد text_cheng براي خوندن تعداد كاركتر هاي و ذخيره كردن در يك Sessen استفاده كنيد.

Kia_MLS
جمعه 21 آبان 1389, 15:48 عصر
ممنون دوست عزیز
حالا چطور باید این مقدار رو پاس بدم تو برنامه و بگم ازش اسفاده کنه؟
چون دستوراتم تو html نمیخوام بنویسم سمت سرور میخوام بنویسم

اوه دوست عزیز، کارت یه مقدار سخت میشه
آیا این مقدار رو میخوای به عنوان یک url پاس بدی به صفحه دیگه؟ منظورم استفاده از پارامترهاست؟ یا اینکه میخوای برنامت مثل یک دیکشنری عمل کنه که به محض اینکه کاربر کد ملیشو توی تکست باکس نشون داد ما هم اون پایین مابقی اطلاعات رو نشون بدیم؟
بگو میخوای با مقدار خوانده شده از تکست باکس چه کار کنی؟

Kia_MLS
جمعه 21 آبان 1389, 16:02 عصر
شما بهتره اين شي تكس باكس رو داخل يك UpdatePanel استفاده كنيد و از رويداد text_cheng براي خوندن تعداد كاركتر هاي و ذخيره كردن در يك Sessen استفاده كنيد.

اگه از UpdatePanel استفاده کنه، رویداد OnTextChange تا زمانی که Focus از روی تکست باکس برداشته نشه اجرا نمیشه

baran_mehr
جمعه 21 آبان 1389, 16:34 عصر
آیا این مقدار رو میخوای به عنوان یک url پاس بدی به صفحه دیگه؟ منظورم استفاده از پارامترهاست؟ یا اینکه میخوای برنامت مثل یک دیکشنری عمل کنه که به محض اینکه کاربر کد ملیشو توی تکست باکس نشون داد ما هم اون پایین مابقی اطلاعات رو نشون بدیم؟
اره تغربا میخوام یه چیز مثل دیکشنری درست کنم که مقدار textbox رو در دیتابیس جستجو کنه و میخوام بعد از ورود هر کاراکتر این کار رو انجام بده

Kia_MLS
جمعه 21 آبان 1389, 16:57 عصر
اره تغربا میخوام یه چیز مثل دیکشنری درست کنم که مقدار textbox رو در دیتابیس جستجو کنه و میخوام بعد از ورود هر کاراکتر این کار رو انجام بده

ابتدا باید یک صفحه به پروژت اضافه کنی که مقدار یک پارامتر رو درون Page_Load میخونه، مقدار پارامتر، مقدار همان تکست باکسی که با جاوا اسکریپت خوندیمش
بعد با توجه به پارامتر خوانده شده درون دیتابیس جستجو انجام میدیم و در نهایت نتیجه جستجو را به صفحه مورد نظر برمیگردونیم

اما این پاس دادن مقدار به صفحه Search.aspx و بازگردوندن نتیجه جستجو یه کم متفاوته، چون ما میخوایم صفحه refresh نشه
باید از Ajax استفاده کنیم، اما نه به شکل معمول اون

یک مثال برات میزنم، بعد شما برنامه رو به اون شکلی که میخوای تغییر بده
مثال من به این شکله که مثلا کاربر درون تکست باکس کد ملی رو وارد میکنه، برنامه همزمان نام خانوادگی فردی رو که نزدیکترین کد ملی به کد ملی وارد شده را دارد نمایش میدهد

ابتدا صفحه ای که کاربر در آن کد ملی را وارد میکند:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Biab.aspx.cs" Inherits="Farzanegan.Web.UI.Biab" %>

<!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 runat="server">
<title></title>
</head>
<body>
<script language="javascript" type="text/javascript">
function MyFunction() {
var xmlHttp;
// Browser detection:
try { xmlHttp = new XMLHttpRequest(); }
catch (e) {
try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) {
try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
catch (e) {
alert('مرورگر شما از آژاکس پشتیبانی نمیکند');
return false;
}
}
}
// End of browser detection
xmlHttp.onreadystatechange = getData;
var inText = document.getElementById("<%= txtCodeMeli.ClientID %>").value;

xmlHttp.open("GET", "Search.aspx?CodeMeli=" + inText, true);
xmlHttp.send(null);

function getData() {
if ((xmlHttp.readyState > 0) && (xmlHttp.readyState < 4)) {
document.getElementById("txtFamily").value = 'صبر کنید...';
}
if (xmlHttp.readyState == 4) {
var SearchedVal = xmlHttp.responseText;
if (SearchedVal != '')
document.getElementById("txtFamily").value = SearchedVal;
}
} //end getData
} //MyFunction
</script>


<form id="form1" runat="server">
<div>
<table width="60%">
<tr>
<td style="width: 20%;">
<a>کد ملی:</a>
</td>
<td style="width: 80%">
<asp:TextBox runat="server" ID="txtCodeMeli" OnKeyUp="setTimeout('MyFunction()',1000);"></asp:TextBox>
</td>
</tr>

<tr>
<td><a>مشخصات:</a></td>
<td>
<asp:TextBox runat="server" ID="txtFamily">
</asp:TextBox>
</td>
</tr>
</table>

</div>
</form>
</body>
</html>

Kia_MLS
جمعه 21 آبان 1389, 17:04 عصر
حالا کد مربوط به OnPageLoad صفحه Search.aspx:



protected void Page_Load(object sender, EventArgs e)
{
var CodeMeli = Request.QueryString["CodeMeli"];
if (CodeMeli == null || CodeMeli == "")
return;

Response.Clear();
var q = DataProvider.GetByCodeMeli(CodeMeli);
string Family = "Not found";

if (q.Count() > 0)
Family = q.First().NameKhanevadegiHaghighi;

Response.Write(Family);
Response.End();
}


تابع var q = DataProvider.GetByCodeMeli(CodeMeli);
هم که توی DataProvidere خودت با توجه به دیتابیس خودت بنویس

موفق باشی

persian_bigboy
جمعه 21 آبان 1389, 17:13 عصر
البته جاواسکریپت یه مشکلی که داره میشه که غیرفعالش کرد . همین . که خیلی عیب بزرگی هست .

persian_bigboy
جمعه 21 آبان 1389, 17:16 عصر
راستی ، اگه از یک ریکویمنت استفاده کمی ، می تونی بایک isValid استفاده کنی . کد ملی رو هم بعد از پست بک چک کن . و از session استفاده نکن ، چون که بار سرور زیاد میشه . این دوستان هم ایده های آماتوری میدن که خودشون هم نمی دونند که چه بلایی سر سرور میاره !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Kia_MLS
جمعه 21 آبان 1389, 17:23 عصر
راستی ، اگه از یک ریکویمنت استفاده کمی ، می تونی بایک isValid استفاده کنی . کد ملی رو هم بعد از پست بک چک کن . و از session استفاده نکن ، چون که بار سرور زیاد میشه . این دوستان هم ایده های آماتوری میدن که خودشون هم نمی دونند که چه بلایی سر سرور میاره !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

1-من در کجای برنامم از Session استفاده کردم؟
2- صورت سوال میگه میخواد به محض اینکه کاربر کلید رو فشار داد برنامه بره و از دیتابیس جستجو کنه، نه اینکه وقتی مقدار تکست باکس پر شد و Focus از روی اون برداشته شد

baran_mehr
جمعه 21 آبان 1389, 19:32 عصر
این دوستان هم ایده های آماتوری میدن که خودشون هم نمی دونند که چه بلایی سر سرور میاره !!!!دوست عزیز نحوه اعتراضتون به این موضوع چندان جالب نبود، میشه با لحن متفاوت تری حرفتون رو بیان کنید.

من در کجای برنامم از Session استفاده کردم؟
منظور ایشون به شما نبود به یکی از دوستان بود که در صفحه قبل یک پست فرستادن ، البته persian_bigboy درست میگن و نباید سر هرچیزی ساده ای به بار سرور اضافه کنیم
Kia_MLS پستهاتو امتحان میکنم و خبرشو میدم.
ممنون

baran_mehr
جمعه 21 آبان 1389, 21:13 عصر
Kia_MLS جان متاسفانه من با اژاکس کار نکردم، فکر کردم کد جاوا گذاشتی
یعنی راه ساده تری وجود نداره

persian_bigboy
شنبه 22 آبان 1389, 00:16 صبح
سلام دوست من ، بهترین کار این هست که سمت سرور کنترل کنی ، خودت استفاده از آجاکس هم خیلی نکات داره و باید خیلی چیزها رو کنترل کنی ، چون باگ امنیتی هم که وجود داره و امکان اتک به نرم افزار هم هست . اگه سیستم رو خوب مدیریت نکرده باشی.

البته من شاید تند جواب داده باشم .! ولی نکته جالب برای دوستان این هست که آخه خودشون باید بدانند که چگونه و برای چه چیزی هر شیئی ساخته شده است و نباید ایده های اشتباده به دوستان بدهند تا دیگران در زمان خواندن کدهای آنها ، به آنها لقب برنامه نویس آماتور را بدهد . این بحثی هم که من آوردم بسیار ساده بود و در مقدمات برنامه نویسی هست . البته در داخل کتاب های برنامه نویسی خوب

Kia_MLS
شنبه 22 آبان 1389, 09:06 صبح
Kia_MLS جان متاسفانه من با اژاکس کار نکردم، فکر کردم کد جاوا گذاشتی
یعنی راه ساده تری وجود نداره

دوست عزیز، به دلیل اینکه شما میخواید عمل جستجو همزمان با ورود داده ها انجام شود، مجبور به استفاده از آژاکس به شکلی که توضیح دادم هستید.
البته میتونی از وب سرویس هم استفاده کنی اما من همون آژاکس را پیشنهاد میکنم

ParsaNM
چهارشنبه 28 اردیبهشت 1390, 11:46 صبح
شرمنده دوستان من يه خورده تازه وارم و کدهاي جاوا رو بلد نيستم ... مشکل منم مثل همين دوستمونه يعني ميخوام با ورود هر کاراکتر در textbox من در ديتابيس فيلتر کنم ...
کدي که دوستمون KIA_MLS گذاشته بودن رو خوندم و 2 تا مشکل دارم يکي اينه که


<script language="javascript">
function TextChange(txt) {
alert('Text changed to: ' + txt.value);
}

</script>

چطور ميشه من در TextChange روتين مربوط به خودم رو اجرا کنم؟
و دوم اينکه در يکي ديگر از کدهاي ايشون ديدم از Response.Clear() و esponse.End() استفاده کرده اند ..
اين 2 تا روتين دقيقا چي کار ميکنن ؟