minlength: function( value, element, param ) { var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element); return this.optional( element ) || length >= param; }, // http://jqueryvalidation.org/maxlength-method/ maxlength: function( value, element, param ) { var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element); return this.optional( element ) || length <= param; }, // http://jqueryvalidation.org/rangelength-method/ rangelength: function( value, element, param ) { var length = $.isArray(value) ? value.length : this.getLength($.trim(value), element); return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] ); },
یک نکته
امروز متوجه شدم که در ورژنی که بنده از jquery-validation استفاده میکنم ، مقدار فیلد را Trim نکرده و عملا سمت کاربر اعتبار سنجی minimum مربوط به StringLength به درستی انجام نمیشد.
راه حل اینجا بود.
کافی است که فایل jquery.validate.js رو گشوده و تغییرات زیر را اعمال کنید.
نظرات مطالب
معرفی برنامهی Subtitle Tools
به روز رسانی
نکتهی مطلب «تخمین مدت زمان خوانده شدن یک مطلب» به این برنامه اضافه شد (یکبار کلیک بر روی recalculate در نوار ابزار آن). کار آن تصحیح مدت زمان نمایش یک ردیف زیرنویس بر اساس مدت زمان خوانده شدن آن هست تا سریع، پیش از خوانده شدن آن، ردیف بعدی نمایش داده نشود و اگر نمایش داده شد، در بالا و یا ذیل آن توسط برنامهی پخش کننده، برای مدتی باقی بماند (روش کار KMPlayer).
نکتهی مطلب «تخمین مدت زمان خوانده شدن یک مطلب» به این برنامه اضافه شد (یکبار کلیک بر روی recalculate در نوار ابزار آن). کار آن تصحیح مدت زمان نمایش یک ردیف زیرنویس بر اساس مدت زمان خوانده شدن آن هست تا سریع، پیش از خوانده شدن آن، ردیف بعدی نمایش داده نشود و اگر نمایش داده شد، در بالا و یا ذیل آن توسط برنامهی پخش کننده، برای مدتی باقی بماند (روش کار KMPlayer).
در بیشتر مواردی که یک تکنولوژی جدید را برای
یادگیری انتخاب میکنیم در اولین فرصت سراغ منابع آنلاین از قبیل کتابها و یا
ویدئوهای موجود بر روی نت میرویم و در این بین ممکن است با محدودیت هایی از قبیل
کیفیت بد اتصال به اینترنت و یا حجم مربوط به فایلهای موجود مواجه شویم. خوب چاره
و نکته در اینجاست که با انتخاب یک کتاب مفید در این زمینه میتوان تا حدود زیادی
این محدویتها را برطرف کرد. در ادامه
برای شروع کار با NHibernate که روز به روز در حال توسعه است، میتوان کتاب
زیر را شروع بسیار خوبی برای کار دانست:
NHibernate 3 Beginners Guide, Aug 2011
در این کتاب بصورتی بسیار جامع از ابتداییترین مسئله تا فنیترین مسائلی که در هر پروژهی عملی هر توسعه دهنده ای با هر سطحی امکان مواجه شدن با این مشکلات را دارد به تفصیل بررسی شده. این کتاب شامل 12 فصل بوده که مطالب آن به شرح زیر ارائه شده است:
1- فصل اول – نگاه اولیه:
- NHibernate چیست
- موارد تازه در آخرین نسخه NHibernate
- چرا ما استفاده کنیم و چه کسانی دیگری استفاده میکنند
- زمانیکه به مشکل برخوردیم از کجا کمک بگیریم یا حتی نسخه ای تجاری تهیه کنیم
- آماده سازی سیستم برای توسعه برنامهها با استفاده از NHibernate
- ایجاد یک مدل ساده از مشکل موجود
- ایجاد بانک و برپایی یک نگاشت (Map) بین مدل و بانک
- نوشتن و خواندن داده از و به بانک
- بحث در مورد بدست آوردن نتیجه معادل بدون استفاده از NHibernate و یا ORM دیگر
- مدل چیست؟
- عوامل اصلی موجود در ایجاد یک مدل چیست؟
- چطور میتوان مدل ساخت؟
- یادگیری جدول چیست؟
- یادگیری چطور جدولها به هم مرتبط شود؟
- بحث در مورد استراتژیهای تحمیلی ای که کدام داده میتواند ذخیره شود
- نمایش امکانات موجود برای بهبود کارایی دسترسی به داده
- ایجاد بانک داده برای سیستم سفارش (Ordering System)
- بدست آوردن یک درک درست درباره نگاشت و پیش نیازهای آن
- بحث در مورد ریزه کاریهای چهار تکنیک پر استفاده معمول نگاشت
- توصیف و توسعه قراردادها برای کاهش تقلا در کدنویسی
- ایجاد خودکار اسکریپت برای ایجاد شمای بانک دیتا از روی نگاشت مان
- توصیف و نگاشت مدل دامنه سیستم سفارش مان
- بحث در مورد اشیاء وهله و تراکنش
- معرفی شیء session factory
- پیاده سازی برنامه ای که دیتا ذخیره و بازخوانی میکند
- تجزیه و تحلیل متدهای گوناگون برای مدیریت وهلهها در پر استفادهترین انواع برنامه
- پیاده سازی یک بستر پایه برای ساخت آزمایش ساده کد دسترسی به بانک داده
- ایجاد آزمایشها برای تایید کد دسترسی به بانک داده مان
- تجزیه و تحلیل ارتباط بین NHibernate و بانک داده
- پیکربندی NHibernate برای واقع نگاری دادههای مورد توجه
- بحث در مورد پیکربندی قبل از شروع
- آشنا شدن با لیست مولفههای NHibernate که میتوان پیکربندی کرد
- یادگیری چهار روش متفاوت پیکربندی که چگونه میتوان در برنامه هایمان استفاده کرد
- یادگیری چگونگی استفاه از (LINQ (Language Integrated Query در NHibernate برای دریافت داده
- پرس و جو با استفاده از criteria query API
- استفاده از گویش object-oriented اصلی SQL بنام Hibernate Query Language HQL
- بحث در مورد موجودیت هایی با خواصی که توان lazy load دارند
- مقابله با بارگذاری حریصانه با lazy loading بطوریکه بصورت دسته ای از پرس و جو بنظر آید
11- فصل یازدهم – اشتباهات متداول – چیزهایی برای جلوگیری
یکی از راههای ذخیره دادهها در سمت کلاینت، استفاده از کوکیها میباشد که تقریبا همه با آن کم و بیش آشنایی داریم و هر کدام بسته به نیاز، تا
حدودی از آن استفاده کردهایم. اما میتوان local storage را در یکی دو
مورد نسبت به کوکی برتر شمرد؛ مواردی مثل حجم دادههای ذخیره شده که نسبت
به کوکی بیشتر میباشد و عدم ارسال با درخواستهای ارسالی سمت سرور.
Local Storage
با استفاده از Local Storage قادر خواهیم بود تا دادههایی را در سمت کلاینت ذخیره کنیم؛ بدون اینکه بر عملکرد سایت تاثیر بگذارد. منظور از تاثیر بر روی عملکرد این است که در هر رفت به سمت سرور لازم نیست با درخواست ارسالی، دادههای اضافهای ارسال شوند.
با استفاده از Local Storage قادر خواهیم بود حداقل 5 مگابایت داده را ذخیره کنیم.
استفاده از Local Storage با استفاده از دو شیء زیر امکان پذیر میباشد:
برای مطمئن شدن از پشتیبانی مرورگر از Local storage، بهتر است ابتدا
اقدام به بررسی پشتیبانی مرورگر مربوطه کرده و در صورت پشتیبانی، اقدام به
ذخیره سازی داده کنیم. نحوه بررسی پشتیبانی مرورگر به صورت زیر میباشد:
شیء window.localStorage
همانطور که بیان کردیم، در این روش داده دارای تاریخ انقضاء نمیباشد.
() SetItem :
متد setItem برای ذخیره اطلاعات است و نحوه استفاده از آن به صورت زیر میباشد:
setItem ابتدا مقدار کلید را بررسی کرده و در صورت عدم موجود بودن، اقدام به ذخیره مقدار با کلید مورد نظر خواهد کرد.
در کد فوق مقدار visitorcount برابر با 16 خواهد بود.
() getItem :
برای دسترسی به مقدار ذخیره شده میتوانیم از متد getItem به همراه مقدار کلید استفاده کنیم. در صورت موجود نبودن مقدار، null برگردانده خواهد شد.
لازم به ذکر است، میتوانیم به صورت زیر هم اقدام به ذخیره و بازیابی دادهها کنیم:
در این حالت شبیه به استفاده از ViewBag میباشد.
و برای حذف اطلاعات ذخیره شده:
- کلید و مقدار به صورت رشتهای ذخیره خواهند شد. در صورتی که قصد ذخیره
سازی با فرمتهای دیگری را داشته باشید، باید ابتدا اقدام به convert نمایید. البته در ادامه کتابخانههایی را برای این مقصود معرفی خواهیم کرد.
خصوصیت length :
تعداد جفت کلید / مقدارهای جاری را بر میگرداند.
متد Key :
این متد مقداری را از ورودی دریافت کرده و اسم کلید مورد نظر را بر میگرداند. ایندکس آن از صفر شروع خواهد شد. قطعه کد زیر باعث برگرداندن مقدار lastname میشود:
متد () clear :
این متد باعث پاک شدن تمامی دادههای ذخیره شده خواهد شد.
شی sessionStorage :
از نظر syntax دستوری همانند localStorage میباشد و تفاوت آن فقط در زمان ذخیره سازی است؛ با بسته شدن تب مرورگر، تمامی دادههای ذخیره شده پاک خواهند شد.
کتابخانههای مرتبط :
Locker :
با استفاده از این کتابخانه ، قادر خواهید بود تا اطلاعات را با فرمتهای مورد نظر، بدون convert آنها ذخیره نمایید. نمونهای از آن به صورت زیر خواهد بود:
کتابخانه فوق دارای امکاناتی بیشتری میباشد که در صورت تمایل میتوانید به گیت هاب آن مراجعه نمایید.
secStore.js :
با استفاده از کتابخانه SJCL امنیت دادههای ذخیره شده، بالا میروند.
و سایر کتابخانههای مرتبط :
Local Storage
با استفاده از Local Storage قادر خواهیم بود تا دادههایی را در سمت کلاینت ذخیره کنیم؛ بدون اینکه بر عملکرد سایت تاثیر بگذارد. منظور از تاثیر بر روی عملکرد این است که در هر رفت به سمت سرور لازم نیست با درخواست ارسالی، دادههای اضافهای ارسال شوند.
با استفاده از Local Storage قادر خواهیم بود حداقل 5 مگابایت داده را ذخیره کنیم.
استفاده از Local Storage با استفاده از دو شیء زیر امکان پذیر میباشد:
- window.localStorage : اطلاعات ذخیره شده در آن فاقد تاریخ انقضاء
میباشند و تا زمانی که اقدام به حذف آن ننمایید، دادههای آن معتبر
میباشند.
- window.sessionStorage : اطلاعات ذخیره شده در آن تا زمان بسته شدن تب مرورگر، معتبر میباشند. با بسته شدن تب فعلی مرورگر، تمامی اطلاعات ذخیره شده از بین خواهند رفت.
نحوه استفاده:
- نحوه افزودن داده در Local Storage به صورت کلید/ مقدار میباشد.
ابتدا نگاهی داشته باشیم به اینترفیس Storage:
interface Storage { readonly attribute unsigned long length; DOMString? key(unsigned long index); getter DOMString? getItem(DOMString key); setter void setItem(DOMString key, DOMString value); deleter void removeItem(DOMString key); void clear(); }
if (typeof(Storage) !== "undefined") { // do ... }
شیء window.localStorage
همانطور که بیان کردیم، در این روش داده دارای تاریخ انقضاء نمیباشد.
() SetItem :
متد setItem برای ذخیره اطلاعات است و نحوه استفاده از آن به صورت زیر میباشد:
localStorage.setItem("lastpost", "localstorage");
localStorage.setItem("visitorCount",15 ); localStorage.setItem("visitorCount", 16);
() getItem :
برای دسترسی به مقدار ذخیره شده میتوانیم از متد getItem به همراه مقدار کلید استفاده کنیم. در صورت موجود نبودن مقدار، null برگردانده خواهد شد.
localStorage.getItem("lastpost");
localStorage.lastpost = "localstorage"; document.getElementById("result").innerHTML = localStorage.lastpost;
و برای حذف اطلاعات ذخیره شده:
localStorage.removeItem("lastpost");
خصوصیت length :
تعداد جفت کلید / مقدارهای جاری را بر میگرداند.
متد Key :
این متد مقداری را از ورودی دریافت کرده و اسم کلید مورد نظر را بر میگرداند. ایندکس آن از صفر شروع خواهد شد. قطعه کد زیر باعث برگرداندن مقدار lastname میشود:
localStorage.setItem("name","uthman" ); localStorage.setItem("lastname","24" ); alert(localStorage.key(1));
این متد باعث پاک شدن تمامی دادههای ذخیره شده خواهد شد.
شی sessionStorage :
از نظر syntax دستوری همانند localStorage میباشد و تفاوت آن فقط در زمان ذخیره سازی است؛ با بسته شدن تب مرورگر، تمامی دادههای ذخیره شده پاک خواهند شد.
کتابخانههای مرتبط :
Locker :
با استفاده از این کتابخانه ، قادر خواهید بود تا اطلاعات را با فرمتهای مورد نظر، بدون convert آنها ذخیره نمایید. نمونهای از آن به صورت زیر خواهد بود:
Lockr.set('website', 'SitePoint'); // string Lockr.set('categories', 8); // number Lockr.set('users', [{ name: 'John Doe', age: 18 }, { name: 'Jane Doe', age: 19 }]);
secStore.js :
با استفاده از کتابخانه SJCL امنیت دادههای ذخیره شده، بالا میروند.
var storage = new secStore , options = { encrypt: true, data: { key: 'some data that is somewhat private' } }; storage.set(options, function(err, results){ if (err) throw err; console.log(results); });
و سایر کتابخانههای مرتبط :
اشتراکها
45 نکته جالب در مورد JavaScript
اشتراکها
کتابخانه jquery-confirm
A multipurpose plugin for alert, confirm & dialog, with Extended features. Demo
بله. این مثال را در کروم اجرا کنید:
AntiXssHeaders.zip
در صفحه اول آن
درج شده
AntiXssHeaders.zip
در صفحه اول آن
<script type="text/javascript"> alert('test'); </script>