تفاوتی نمیکند که از کدامیک از HTML Editorها یا به عبارتی wysiwyg-editorهای موجود، جهت ورود اطلاعات استفاده میکنید. هیچکدام از آنها سبب فراخوانی اعتبارسنجی Required سمت کاربر نمیشوند. چرا؟
علت اینجا است که با فعال سازی wysiwyg-editorهای موجود، المان HTML پیش فرض مانند یک TextArea حالت مخفی پیدا میکند:
و اگر به سورس کد فایل jquery.validate.js مراجعه کنید، یک چنین تعریف پیش فرضی در آن موجود است:
به این معنا که در حین اعتبارسنجی سمت کاربر، از کلیه المانهای hidden بر روی صفحه صرفنظر خواهد شد.
برای رفع این مشکل کافی است بنویسیم:
در اینجا پیش فرضهای jQuery validator بازنویسی شده و در آن از textareaهای مخفی صرفنظر نمیشود.
اگر میخواهید کلا از چیزی صرفنظر نشود، مقدار آنرا به "" تنظیم کنید.
مشکل دوم! متد required پیش فرض، فقط به رشتههای خالی یا نال واکنش نشان میدهد. اما اگر کاربری در اینجا <p><br/></p> را وارد کرد، چطور؟
در این حالت نیاز است متد rqeuired پیش فرض jQuery validator را به نحو ذیل بازنویسی کنیم:
متد removeAllTagsAndTrim کلیه تگهای یک عبارت HTML ایی را حذف میکند. متد trim جیکوئری نیز سبب حذف فواصل خالی در ابتدا و انتهای یک رشته میشود. اکنون نیاز است این متد سفارشی را جهت تمیزسازی عبارت ورودی به متد توکار required اعمال کنیم.
برای اینکار نیاز است متد اصلی required را در جایی ذخیره کنیم تا در صورت شکست اعتبارسنجی سفارشی، همان متد اصلی فراخوانی گردد. در ادامه با فراخوانی jQuery.validator.addMethod و بکارگیری نام required، دقیقا همان متد اصلی required موجود بازنویسی خواهد شد. در ابتدای کار تگهای ورودی پاک شده و سپس اعتبارسنجی میشوند.
در ادامه فراخوانی متد اصلی required را ملاحظه میکنید. همچنین با استفاده از jQuery.validator.messages.required اصل پیام خطای تنظیم شده به کاربر نمایش داده خواهد شد.
علت اینجا است که با فعال سازی wysiwyg-editorهای موجود، المان HTML پیش فرض مانند یک TextArea حالت مخفی پیدا میکند:
و اگر به سورس کد فایل jquery.validate.js مراجعه کنید، یک چنین تعریف پیش فرضی در آن موجود است:
$.extend( $.validator, { defaults: { ignore: ":hidden",
برای رفع این مشکل کافی است بنویسیم:
jQuery.validator.setDefaults({ ignore: ":hidden:not(textarea)" });
اگر میخواهید کلا از چیزی صرفنظر نشود، مقدار آنرا به "" تنظیم کنید.
مشکل دوم! متد required پیش فرض، فقط به رشتههای خالی یا نال واکنش نشان میدهد. اما اگر کاربری در اینجا <p><br/></p> را وارد کرد، چطور؟
در این حالت نیاز است متد rqeuired پیش فرض jQuery validator را به نحو ذیل بازنویسی کنیم:
<script type="text/javascript"> // حذف تمام تگهای یک قطعه متن function removeAllTagsAndTrim(html) { return !html ? "" : jQuery.trim(html.replace(/(<([^>]+)>)/ig, "")); } // این تنظیم برای پردازش ادیتور مخفی وب لازم است jQuery.validator.setDefaults({ ignore: ":hidden:not(textarea)" }); // متد اصلی اعتبارسنجی را ابتدا ذخیره میکنیم jQuery.validator.methods.originalRequired = jQuery.validator.methods.required; // نحوه بازنویسی متد توکار اعتبار سنجی جهت استفاده از یک متد سفارشی jQuery.validator.addMethod("required", function (value, element, param) { value = removeAllTagsAndTrim(value); if (!value) { return false; } // فراخوانی متد اصلی اعتبار سنجی در صورت شکست تابع سفارشی return jQuery.validator.methods.originalRequired.call(this, value, element, param); }, jQuery.validator.messages.required); </script>
برای اینکار نیاز است متد اصلی required را در جایی ذخیره کنیم تا در صورت شکست اعتبارسنجی سفارشی، همان متد اصلی فراخوانی گردد. در ادامه با فراخوانی jQuery.validator.addMethod و بکارگیری نام required، دقیقا همان متد اصلی required موجود بازنویسی خواهد شد. در ابتدای کار تگهای ورودی پاک شده و سپس اعتبارسنجی میشوند.
در ادامه فراخوانی متد اصلی required را ملاحظه میکنید. همچنین با استفاده از jQuery.validator.messages.required اصل پیام خطای تنظیم شده به کاربر نمایش داده خواهد شد.