PDA

View Full Version : كنترل فرمت تاريخ شماره ملي شماره تلفن با JQuery



golagha_program
یک شنبه 26 مهر 1388, 18:32 عصر
با سلام .مي خوام شروع كنم و يك سري نمونه از قدرت Jquery براتون بزارم اين اولين نمونه است.
كدها بي نهايت ساده هستند و لي بسيار كارآمد.





--------------------------------------------------------------------------------------
با تشكر

مهدی کرامتی
یک شنبه 26 مهر 1388, 20:05 عصر
با تشکر از فعالیت تون، لطفا همراه با نمونه ضمیمه شده، مراحل انجام کار را نیز بصورت شماره گذاری شده و قدم به قدم در نوشته تان قرار دهید. ممکن است مثال برای مبتدیان به اندازه کافی گویا نباشد.

اصلاحیه: مثال ضمیمه شده فقط حاوی فایل Solution است، سورس مثال شامل صفحات و فایل های Code Behind و ... فراموش شده است.

golagha_program
دوشنبه 27 مهر 1388, 18:52 عصر
چشم جناب مدير.:لبخندساده:

پس از اول شروع مي كنم.

جي كوئري يك كتابخانه جاوا اسكريپت كه كلي قابليت دارد.
1-باري كه به صفحه اضافه مي شه خيلي كمه.
2-حجم كدي كه نوشته مي شه خيلي كمه(كاري كه با جاوا اسكريپت تو 50 خط شما مي كنيد اينجا با 5 خط مي شه انجام داد)
3-پياده سازي آجكس با بارگذاري كم كه بهترين و كمي سخترين قابليتشه

همراه اين كتابخانه يك سري پلاگين هم هست كه قابلست هاي مختلفي دارن كه مشهور تريناش
UI ,DragDrop,Validation,InputMask,.....
با هاش راحت مي شه سايتي مثل igoogle رو پياده سازي كرد گالري عكس هاي حرفه اي و منوهاي زيبا مثل facebook و كلي افكت ديگر.

.............................شروع مي كنيم
براي استفاده ازش بايد فايل Jquery.js رو به پروژتون اضافه كنيد (تمام سورس ها توي سايت www.jquery.com موجود ولي چون گوگل اي پي ايران رو تحريم كرده نمي شه دانلود كرد ولي اب نداره من براتون مي زارم)

بعد از اضافه كردن به پروژه بايد تو هر صفحه تعريف كنيد


<script src="../js/jquery.min.js" type="text/javascript"></script>


خوب بعد از اين بايد از توابع استفاده كرد در اول بايد اين كار رو كرد


$(document).ready(function() {

});

اين تابع بيس و بعد از لود كامل صفحه اجرا مي شه

خوب حالا چطوري به كنترل هاي توي صفحه دسترسي پيدا كنيم.

اگر صفحتون سادس و masterpage نداره يا usercontrol نيست


$("#TextBox1").Val("yes");

كه Textbox1 همون id كنترل تكست باكس صفحه است.
خوب اگر صفحتون masterpage داره يا داريد usercontrol مي نويسيد قضيه فرق داره


$("[id$='TextBox1']").val("yes");


اين قسمت مهم بود چون واقعاً آدمو آزار مي داد.

خوب اينايي كه گفتم مقدمات بود و خيلي سادس.

پلاگيني كه باهاش كار ميكنيم Maskinput كه فرمت تكست باكس ها رو مي شه تعيين كرد بايد اين پلاگين به صفحه اضافه شه.


<script src="js/jquery.maskedinput-1.1.4.pack.js" type="text/javascript"></script>


كد زير فرمت تاريخ رو توي تكست باكس ماسك مي كنه


$(document).ready(function() {
$("#TextBox1").mask("99/99/9999");

});


كد زير فرمت شماره ملي


$(document).ready(function() {
$("#TextBox1").mask("999-999999-9");

});


كد زير فرمت شماره تلفن


$(document).ready(function() {
$("#TextBox1").mask("(999)-9999999");

});

9 يعني فقط عدد
اگر در تابع ماسك a بنويسيد يعني فقط حرف اگر * يعني آزاديد كه هر جوري مي خواي بنويسي

خيلي سادس اگر اينو مي خواستي با جاوا اسكريپت بنويسي چقدر مي شد؟

خب آقاي مدير اينم توضيحات براي تازه كار ها.

توي سري بعد مي ريم يكم كار گرافيكي باهاش مي كنيم و اگر خدا بخواد تا مرحله نوشتن يك پرتال مثل igoogle پيش مي ريم.دوستان ديگه هم مقالات رو ادامه بدن.

-------------------------------------------------------------------------------------
با تشكر گل آقا

spyware
سه شنبه 28 مهر 1388, 14:21 عصر
WebSite6.rar‏ (http://barnamenevis.org/forum/attachment.php?attachmentid=38552&d=1255876291) خالی بود جناب مهندس دانلودش کردم sulotion خالی بود در ضمن از توضیحات برای تازه کارا ممنون

mehdi.mousavi
سه شنبه 28 مهر 1388, 14:47 عصر
چشم جناب مدير.:لبخندساده:
خوب اگر صفحتون masterpage داره يا داريد usercontrol مي نويسيد قضيه فرق داره


$("[id$='TextBox1']").val("yes");
اين قسمت مهم بود چون واقعاً آدمو آزار مي داد.

سلام.
من کدهاتون رو نگاه نکردم، اما نوشتن چنین selector ای صحیح نیست و کاملا هم میتونه مشکل ساز باشه. (فرصت توضیح جزییات رو ندارم). این selector داره کلیه element های DOM Doc ای رو که Property ی Id اونها به TextBox1 ختم میشه رو انتخاب میکنه و خوب، بسته به شرایط، ممکنه چند تا کنترل رو صفحه باشن که اسمشون به این عبارت ختم بشه. بنابراین، بهتره که selector رو بگونه دیگه ای بنویسید، یا از امکانات ASP.NET بهره مند بشید:

$('#<%=TextBox1.ClientID%>')

به این ترتیب، ASP.NET خودش ClientID کنترل TextBox1 رو جایگزین عبارت فوق الذکر میکنه و همه چی بخوبی و خوشی تموم میشه!

موفق باشید.

golagha_program
سه شنبه 28 مهر 1388, 15:43 عصر
با سلام

من از شما مي پرسم شما مي تونيد توي يك صفحه چند كنترل تكست باكس با id يكسان تعريف كني؟
در صورتي چنين امري ممكنه كه شما يا از usercontrol استفاده كني و يا masterpage content page داشته باشي.

من گفتم توي Masterpage ContentPage و usercontrol بايد از كد زير استفاده كرد


$("[id$='TextBox1']")


اين راهكار جي كوئري id يكتاي كنترل موجود را بر مي گردونه(حالا اگر توي يك usercontrol باشه كه اضافه شده به يك صفحه)
اين روش درست و مشكلي نداره

Jquery با ارائه $ كار شما را راحت كرده و در دسرهاي جاوا اسكريپتي زير را حل و ساده كرده



document.getElementById('<%= Textbox1.ClientID%>')
ويا
window.document.getElementById('<%= Textbox1.ClientID%>')


اينم پروژه كه انگار اجراش مشكل داشت.
----------------------------------------------
با تشكر گل آقا

mehdi.mousavi
سه شنبه 28 مهر 1388, 17:28 عصر
با سلام من از شما مي پرسم شما مي تونيد توي يك صفحه چند كنترل تكست باكس با id يكسان تعريف كني؟ در صورتي چنين امري ممكنه كه شما يا از usercontrol استفاده كني و يا masterpage content page داشته باشي. من گفتم توي Masterpage ContentPage و usercontrol بايد از كد زير استفاده كرد


$("[id$='TextBox1']")
اين راهكار جي كوئري id يكتاي كنترل موجود را بر مي گردونه(حالا اگر توي يك usercontrol باشه كه اضافه شده به يك صفحه)
اين روش درست و مشكلي نداره

Jquery با ارائه $ كار شما را راحت كرده و در دسرهاي جاوا اسكريپتي زير را حل و ساده كرده


سلام.
من حداقل یک کار رو تو دنیا خوب انجام میدم و بهش کاملا تسلط دارم و اونهم چیزی نیست جزء امور مربوط به طراحی و پیاده سازی انواع و اقسام نرم افزارها با تکنولوژیهای مایکروسافت. بنابراین وقتی حرفی میزنم، میدونم دارم چی میگم و ...

در پاسخ به سوال شما باید عرض کنم که خیر. شما نمی تونید چند تا کنترل سمت سرور با ID یکسان داشته باشید. اما jQuery به کدهای سمت سرور کاری نداره. کد HTML زیر رو در نظر بگیرید:


<asp:Content ID="Content2" ContentPlaceHolderID="cphMain" runat="server">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:TextBox ID="myTextBox1" runat="server"></asp:TextBox>
</asp:Content>


همونطور که می بینید، ID دو TextBox متفاوته و یکسان نیست. کد فوق الذکر باعث ایجاد HTML زیر میشه، چیزی شبیه این:

<input id="ctl00_cphMain_TextBox1" type="text" name="ctl00$cphMain$TextBox1"/>
<input id="ctl00_cphMain_myTextBox1" type="text" name="ctl00$cphMain$myTextBox1"/>

و selector ای که شما نوشتید و من در پست اول اشاره کردم، یعنی $("[id$='TextBox1']") باعث میشه تا هر دو TextBox انتخاب بشن چون هر دو به TextBox1 ختم میشن در صورتیکه هدف، انتخاب TextBox اول بوده. این روش همونطوری که گفتم روش مناسبی برای استفاده در این سناریو نیست!

golagha_program
چهارشنبه 29 مهر 1388, 00:16 صبح
سلام.
این مبحث خیلی سادس و من قصد ندارم سر چیزهای کوچیک با کسی کل کل کنم و قصدم آموزش Jquery .
در مورد شما فقط می تونم بگم اعتماد بنفستون بالاست ولی باید بیشتر مطالعه کنی چون اطلاعاتتون کامل نیست .

اینم نمونه کار که هیچ مشکلی نداره .




---------------------------------------------------------
با تشکر گل آقا

مهدی کرامتی
چهارشنبه 29 مهر 1388, 01:23 صبح
دوست گرامی، گل آقا.

پذیرش مشکلات احتمالی که ممکنه شما به اونها توجه نکرده باشید باعث پیشرفت کار است، نه کوچک شمردن کار.

مطلب نوشته شده توسط mehdi6755 (http://barnamenevis.org/forum/member.php?u=41233) کامل کننده مطلب شماست و کل کل محسوب نمیشه.

کاربرد تالار گفتمان همین است.

spyware
چهارشنبه 29 مهر 1388, 10:19 صبح
آقای mehdi6755 من این مشکل رو روی sulotion گل آقا تست کردم ولی به مشکلی که شما گفتین برخورد نکردم ممکنه این مشکل در شرایط خاص تری پیش بیاد ؟


با تشکر

mehdi.mousavi
چهارشنبه 29 مهر 1388, 12:15 عصر
آقای mehdi6755 من این مشکل رو روی sulotion گل آقا تست کردم ولی به مشکلی که شما گفتین برخورد نکردم ممکنه این مشکل در شرایط خاص تری پیش بیاد ؟
با تشکر

سلام.
ببینید. من Source ایشون رو دیدم. این کدی هستش که ایشون تو WebForm2.aspx نوشتن:


<script language="javascript">
$(document).ready(function() {
$("[id$='TextBox1']").val("TextBox1");
$("[id$='myTextBox1']").val("myTextBox1");
});
</script>


این کد مشکلی نداره چون ID هر یک رو بطور کامل ذکر کرده و فقط ننوشتن TextBox1 (بر خلاف پست فوق الذکر). اگر بنویسن TextBox1، اونوقت هر دو TextBox توسط selector مزبور انتخاب میشه. یعنی:

$("[id$='TextBox1']").val("TextBox1");

باعث خواهد شد تا مقدار هر دو TextBox برابر TextBox1 بشه (این چیزی هستش که در پست فوق الذکر بهش اشاره شد و من گفتم صحیح نیست).

اما ایشون ظاهرا منظورشون ذکر ID بصورت کامل در selector بوده چون خط دوم رو به اینصورت نوشتن:

$("[id$='myTextBox1']").val("myTextBox1");

که خوب. طبیعتا این مشکلی نداره... اما اینطور آدرس کردن element ها در jQuery، تا مادامیکه مایکروسافت منطق تولید اسامی Client-Side رو تغییر نده، معتبره. اگر فردا این منطق تغییر کنه، و شما نیاز داشته باشید تا یه برنامه قدیمی رو برای استفاده از Framework جدید بهنگام کنید، کلیه کدهای Javascript مورد نظر در App هم باید تغییر کنه و این برای برنامه نویس کابوسه. چون علاوه بر خودش، به تیمش هم بار سنگینی رو تحمیل خواهد کرد.

golagha_program
چهارشنبه 29 مهر 1388, 13:36 عصر
سلام.

اين نكته جالب بود و باعث شد كه راجع به Selectorها در jquery مطلب بنويسم.چيزي كه آقاي
mehdi6755 گفت درست بود و ايشون مي گن براي selector از روش زير استفاده كنيم


$('#<%=TextBox1.ClientID%>')

كه بر اساس id گذاري يكتا استفاده ميشه ولي خوب بستگي به نام گذاري elemnt هاي صفحه تون داره كه از كدام روش استفاده كنيد يا با كدام راحتتر باشيد.

براي انتخاب كردن يك المنت صفحه با id ش :


<script>
$(document).ready(function(){
$("#myDiv").css("border","3px solid red");
});
</script>
<style>
div {
width: 90px;
height: 90px;
float:left;
padding: 5px;
margin: 5px;
background-color: #EEEEEE;
}
</style>
</head>
<body>
<div id="notMe"><p>id="notMe"</p></div>
<div id="myDiv">id="myDiv"</div>
</body>
</html>


اينجا 2 تا div داريم كه بر اساس id انتخاب مي شه.
انتخاب بر اساس element هاي صفحه


<script>
$(document).ready(function(){
$("div").css("border","3px solid red");
});
</script>
<style>
div,span {
width: 60px;
height: 60px;
float:left;
padding: 10px;
margin: 10px;
background-color: #EEEEEE;
}
</style>
</head>
<body>
<div>DIV1</div>
<div>DIV2</div>
<span>SPAN</span>
</body>
</html>


و اين باعث انتخاب كل div هاي صفحتون مي شه.
حالا يك چيز جالب در Selector بر اساس Class كه خيلي جالبه


<script>
$(document).ready(function(){
$(".myClass").css("border","3px solid red");
});
</script>
<style>
div,span {
width: 150px;
height: 60px;
float:left;
padding: 10px;
margin: 10px;
background-color: #EEEEEE;
}
</style>
</head>
<body>
<div class="notMe">div class="notMe"</div>
<div class="myClass">div class="myClass"</div>
<span class="myClass">span class="myClass"</span>
</body>
</html>



براي انتخاب كل المنت هاي صفحتون


<script>
$(document).ready(function(){
$("*").css("border","3px solid red");
});
</script>
<style>
div,span,p {
width: 150px;
height: 60px;
float:left;
padding: 10px;
margin: 10px;
background-color: #EEEEEE;
}
</style>
</head>
<body>
<div>DIV</div>
<span>SPAN</span>
<p>P <button>Button</button></p>
</body>
</html>


اين يكي روش محشره مي تونيد چند المنت خاص با id خاص و يا نام كلاس خاص رو انتخاب كنيد


<script>
$(document).ready(function(){
$("div,span,p.myClass").css("border","3px solid red");
});
</script>
<style>
div,span,p {
width: 130px;
height: 60px;
float:left;
padding: 3px;
margin: 2px;
background-color: #EEEEEE;
font-size:14px;
}
</style>
</head>
<body>
<div>div</div>
<p class="myClass">p class="myClass"</p>
<p class="notMyClass">p class="notMyClass"</p>
<span>span</span>
</body>
</html>


حالا اگر يك المنت درونش چند المنت ديگر تعريف شده باشد و حالت مادر و فرزندي داشته باشد


<script>
$(document).ready(function(){
$("#main > *").css("border", "3px double red");
});
</script>
<style>
body { font-size:14px; }
span#main { display:block; background:yellow; height:110px; }
button { display:block; float:left; margin:2px;
font-size:14px; }
div { width:90px; height:90px; margin:5px; float:left;
background:#bbf; font-weight:bold; }
div.mini { width:30px; height:30px; background:green; }
</style>
</head>
<body>
<span id="main">
<div></div>
<button>Child</button>
<div class="mini"></div>
<div>
<div class="mini"></div>
<div class="mini"></div>
</div>
<div><button>Grand</button></div>
<div><span>A Span <em>in</em> child</span></div>
<span>A Span in main</span>
</span>
</body>
</html>


روش بعدي روش فيلتر گذاريه كه اونم جالب و توي جداول بدرد مي خوره


<script>
$(document).ready(function(){
$("tr:first").css("font-style", "italic");
});
</script>
<style>
td { color:blue; font-weight:bold; }
</style>
</head>
<body>
<table>
<tr><td>Row 1</td></tr>
<tr><td>Row 2</td></tr>
<tr><td>Row 3</td></tr>
</table>
</body>
</html>


كه اولين tr رو انتخاب مي كنه آخرين tr


<script>
$(document).ready(function(){
$("tr:last").css({backgroundColor: 'yellow', fontWeight: 'bolder'});
});
</script>

</head>
<body>
<table>
<tr><td>First Row</td></tr>
<tr><td>Middle Row</td></tr>
<tr><td>Last Row</td></tr>
</table>
</body>
</html>


اين يكي جالبه checkbox هايي كه انتخاب نشدن روش افكت مي ده و از كلمه كليدي not استفاده مي كنه


<script>
$(document).ready(function(){

$("input:not(:checked) + span").css("background-color", "yellow");
$("input").attr("disabled", "disabled");

});
</script>

</head>
<body>
<div>
<input type="checkbox" name="a" />
<span>Mary</span>
</div>
<div>
<input type="checkbox" name="b" />
<span>Paul</span>
</div>
<div>
<input type="checkbox" name="c" checked="checked" />
<span>Peter</span>
</div>
</body>
</html>


حالا اين روش انتخاب فيلتر گزاري كه مي تونيد بر اساس محتواي متني يك المنت انتخاب انجام بديد


<script>
$(document).ready(function(){
$("div:contains('hadi')").css("text-decoration", "underline");
});
</script>

</head>
<body>
<div>hadi</div>
<div>Sepide</div>
<div>Hadi gol agha</div>
<div>h.a..D.i
</body>
</html>

كه در div ها هر كدام شامل hadi بشن زيرش خط مي كشه.



------------------------------------------------------------------------------
با تشكر گل آقا

iman_ad
چهارشنبه 29 مهر 1388, 18:01 عصر
منم با آقا مهدی موافقم استفاده از clientID منطقی تر به نظر می رسه کنترهای مبتنی بر آجاکس هم از این روش استفاده می کنند.

iman_ad
چهارشنبه 29 مهر 1388, 18:05 عصر
همان طور که همه می دونیم کنترل های .net همه به صورت فرزند، پدر پیاده سازی شده اند، حالا فرض کنید می خوایم یک سل از یک گرید یا یک چک باکس از item template یک کنترل انتخاب کنیم باید چیکار کنیم از attribute استفاده کنیم مثل javascript ?

smrb59
چهارشنبه 29 مهر 1388, 21:36 عصر
آقا دستت درد نکنه از جی کوئری بیشتر بگید..
منتظریم..

golagha_program
پنج شنبه 30 مهر 1388, 00:28 صبح
همان طور که همه می دونیم کنترل های .net همه به صورت فرزند، پدر پیاده سازی شده اند، حالا فرض کنید می خوایم یک سل از یک گرید یا یک چک باکس از item template یک کنترل انتخاب کنیم باید چیکار کنیم از attribute استفاده کنیم مثل javascript ?

با سلام.
مرسی از دوستان خوبم آقا بحث خیلی داغ و جالب شد مباحثی که شما گفتی بسیار زیباست و Jquery راهکار ساده ای ارائه می ده.
یکی از روش های Selector ها استفاده از Class .با نمونه کد زیر بیشتر توضیح می دم


<script type="text/javascript">
$(function() {
var $radBtn = $("table.tbl input:radio");
$radBtn.click(function() {
var $radChecked = $(':radio:checked');
$("#para").text('')
.append("<b>Index: </b>" +
$radChecked.val() + "<br/>")
.append("<b>Value: </b>" +
$radChecked.next().text());
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div class="smallDiv">
<h2>Select a RadioButton to display its Text and Value</h2><br />
The site I like the most : <br />
<asp:RadioButtonList ID="rbl" runat="server" class="tbl"
ToolTip="Select a Radio Button to see its text and value">
<asp:ListItem Text="dotnetcurry.com" Value="0"></asp:ListItem>
<asp:ListItem Text="devcurry.com" Value="1"></asp:ListItem>
<asp:ListItem Text="sqlservercurry.com" Value="2"></asp:ListItem>
</asp:RadioButtonList>
<br />
<p id="para"></p>
</div>
</form>
</body>
</html>


کد بالا یک لیستی از Radiobuttom که اگر روش کلیک کنی index وValue رو نشان می ده.
همونطوری که شما گفتید کنترل های .net مادر فرزندی هستند.


var $radBtn = $("table.tbl input:radio");

با این کد radiobuttom انتخاب می شه ولی حالا چرا table.tbl ؟چونRadioButtonList صورت جدول رندر می شه و از کلاسش مشخص می شه که کدام لیست منظور ماست


var $radChecked = $(':radio:checked');

با این کدم انتخاب شده رو بدست میاریم


$radChecked.val()
$radChecked.next().text());


با این کدم ایندکس و مقدارش حالا چرا $radChecked.next().text());
و منظورش چیه؟
اگر html رو نگاه کنیم یه چنین چیزی به ما میده


<td>
<input id="rbl_0" type="radio" name="rbl" value="0" />
<label for="rbl_0">dotnetcurry.com</label>
</td>


که value ما توی یک label درون یک tdهست و دستور next() اولین همراه رو پیدا می کنه.

امیدوارم مفید باشه.
-------------------------------------------------------------------------------------
با تشکر گل آقا