1 2(function($){ 3 4 $.fn.riaForm = function( options ){ 5 6 var version = "1.5"; 7 8/* ÐÐСТРÐÐÐÐ */ 9 10 var options = $.extend({ 11 type: 'post', // Ð´Ð»Ñ ajax, Ñип вÑполнÑемого запÑоÑа 12 dataType: 'json', // Ñип даннÑÑ , в коÑоÑом ожидаеÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¾ÑÐ²ÐµÑ Ð¾Ñ ÑеÑвеÑа 13 block: true, // блокиÑоваÑÑ ÑоÑÐ¼Ñ Ð¿Ñи ajax запÑоÑе 14 loader: '.loader', // ÑелекÑÐ¾Ñ Ð»Ð¾Ð°Ð´ÐµÑа, должен Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² <form>...</form> 15 deleteData: false, // object - Ð¿Ð¾Ð»Ñ ÐºÐ¾ÑоÑÑе надо ÑдалиÑÑ Ð¸Ð· оÑпÑавки 16 rules: false, // object - пÑавила Ð´Ð»Ñ Ð¾Ð±ÑзаÑелÑнÑÑ Ðº Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ 17 mixinData: false, // function - добавление полей 18/* 19* ÐаÑÑÑойки Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð°ÑÑов оÑибок на Ð¿Ð¾Ð»Ñ Ð¸ label 20*/ 21 errorClass: 'm-error', // клаÑÑ Ð¾Ñибки, добавлÑеÑÑÑ Ð½Ð° ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸/или label (клаÑÑ Ð±ÐµÐ· ÑоÑки) 22 errorInput: false, // добавлÑÑÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки на ÑÐ»ÐµÐ¼ÐµÐ½Ñ 23 errorLabel: false, // добавлÑÑÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки на label 24/* 25* ÐаÑÑÑойки вÑвода оÑибок полей 26* <form> ... <span class="message-error" data-field="field_name"></span> ... </form> 27*/ 28 errorMessage: true, // показÑваÑÑ ÑообÑение об оÑибке 29 message: '.message-error', // ÑелекÑÐ¾Ñ Ð±Ð»Ð¾ÐºÐ° Ð´Ð»Ñ Ð²Ñвода ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибке 30 messageConnector: 'data-field', // аÑÑибÑÑ Ð¿Ð¾Ð»Ñ Ð² коÑоÑое вÑводиÑÑÑ ÑообÑение об оÑибке, Ñавен имени Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ ÐºÐ¾ÑоÑого вÑводиÑÑÑ ÑообÑение 31 messages: false, // object - ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑÐ¸Ð±ÐºÐ°Ñ Ð´Ð»Ñ Ð¾Ð±ÑзаÑелÑнÑÑ Ðº Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ 32 errorCallback: undefined, // function - вÑзÑваеÑÑÑ Ð¿Ñи налиÑии оÑибок в заполнении ÑоÑÐ¼Ñ (обÑзаÑелÑнÑÑ Ð¿Ð¾Ð»ÐµÐ¹ опÑеделеннÑÑ Ð² rules) пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¼Ð°ÑÑив оÑибок 33/* 34* ÐаÑÑÑойки вÑвода алеÑÑов полей 35* <form> ... <div class="message-alert"></div> ... </form> 36*/ 37 errorAlert: false, // показÑваÑÑ Ð°Ð»ÐµÑÑ Ð¿ÑиÑедÑий в оÑÐ²ÐµÑ 38 alert: '.message-alert', // ÑелекÑÐ¾Ñ Ð±Ð»Ð¾ÐºÐ° Ð´Ð»Ñ Ð²Ñвода алеÑÑа 39 alerts: false, // object - алеÑÑÑ 40 alertCallback: undefined, // function - вÑзÑваеÑÑ Ð¿Ð¾Ñле показа алеÑÑа 41/* 42* callback ÑÑнкÑии 43*/ 44 submitCallback: undefined, // function - вÑполнÑеÑÑÑ Ð¿ÐµÑед оÑпÑавкой даннÑÑ 45 successCallback: undefined, // function - вÑполнÑеÑÑÑ Ð¿Ñи возвÑаÑе оÑвеÑа success 46 forceCallback: undefined // function - вÑполнÑеÑÑÑ Ð¿Ñи лÑбом оÑвеÑе 47 48 }, options || {}); 49 50/* ÐÐÐ ÐÐÐÐÐЫР*/ 51 52 var form = $( this ); // <form> - веÑаÑÑ Ð¿Ð»Ð°Ð³Ð¸Ð½ на него 53 var loader = $( options.loader, form ); // Ð»Ð¾Ð°Ð´ÐµÑ 54 var dataUrl = form.attr( 'action' ); // url Ð´Ð»Ñ ajax, беÑÐµÑ Ñ Ð°ÑÑибÑÑа action form 55 var errors = 0; 56 var errorsMessage = {}; 57 58/* ФУÐÐЦÐÐ */ 59 60 /* ÐоказÑÐ²Ð°ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ */ 61 var showFieldError = function( name, error ){ 62 /* показÑÐ²Ð°ÐµÑ Ð¿Ð°ÑÑ "поле оÑибка" в конÑоли */ 63 console.log( name,' ', error ); 64 /* ÐÑÑанавливаеÑÑÑ ÐµÑли не пеÑÐµÐ´Ð°Ð½Ñ Ð¿Ð°ÑамеÑÑÑ */ 65 if( !name || !error ){ 66 return; 67 } 68 var field; 69 /* ÐÑовеÑка какое поле Ð¸Ð¼ÐµÐµÑ Ð¿ÐµÑеданнÑй name и ÑÐ¾Ñ Ñанение в field */ 70 if( $( 'input[name="' + name + '"]', form ).length > 0){ 71 field = $( 'input[name="' + name + '"]', form ); 72 } else if($('textarea[name="' + name + '"]', form ).length > 0){ 73 field = $( 'textarea[name="' + name + '"]', form ); 74 } else if($('select[name="' + name + '"]', form ).length > 0){ 75 field = $( 'select[name="' + name + '"]', form ); 76 } else { 77 return; 78 } 79 /* ÐобавлÑÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки ÑÐµÐ³Ñ input, textarea или select */ 80 if( options.errorInput ){
81 field.addClass( options.errorClass ); 82 } 83 /* ÐобавлÑÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки к Ð»ÐµÐ¹Ð±Ð»Ñ Ð¿Ð¾Ð»Ñ */ 84 if( options.errorLabel ){ 85 var label = $( 'label[for="'+ field.attr( 'id' ) +'"]' ); 86 if( label.length > 0 ){ 87 /* ÐобавлÑеÑк лаÑÑ Ð¾Ñибки на label[for="..."]*/ 88 label.addClass( options.errorClass ); 89 } else if( field.parent().get( 0 ) && field.parent().get( 0 ).tagName == 'LABEL' ){ 90 /* ÐобавлÑÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки на пеÑвÑй ÑодиÑелÑÑкий label */ 91 field.parent().addClass( options.errorClass ); 92 } 93 } 94 /* ÐоказÑÐ²Ð°ÐµÑ ÑообÑение об оÑибке Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ */ 95 if( options.errorMessage ){ 96 var message = $( options.message + '[' + options.messageConnector + '="' + name + '"]', form ); 97 if( message.length > 0 && options.messages && options.messages[ name ] ){ 98 message.empty().append( options.messages[ name ][ error ] ).show(); 99 } 100 } 101 }; 102 103 /* ÐÑовеÑка пÑавил и подÑвеÑка оÑибок */ 104 var checkRules = function(){ 105 for( key in options.rules ){ 106 var type = $.type( options.rules[ key ] ); 107 /* ÐÑли пеÑедан обÑÐµÐºÑ */ 108 if( type === 'object' ){ 109 for( node in options.rules[ key ] ){ 110 var name = key; 111 var value = options.rules[ key ][ node ]; 112 checkRulesType( name, node, value ); 113 } 114 } 115 /* ÐÑли пеÑедан маÑÑив */ 116 if( type === 'array' ){ 117 var name = key; 118 for( node in options.rules[ key ]){ 119 value = options.rules[ key ][ node ]; 120 checkRulesType(name, value); 121 } 122 } 123 /* ÐÑовеÑÑÐµÑ Ð¿ÐµÑеданное знаÑение */ 124 else{ 125 checkRulesType( key, options.rules[ key ] ); 126 } 127 } 128 return errors; 129 }; 130 131 var checkRulesType = function( name, key, value ){ 132 switch( key ){ 133 134 /* ФÑнкÑÐ¸Ñ */ 135 case 'function': 136 if ( value instanceof Function ){ 137 var result = value( form, name ); 138 if( result == false ){ 139 errors++; 140 errorsMessage[ name ] = 'function'; 141 showFieldError( name, 'function'); 142 } 143 } 144 break; 145 146 /* ÐÑÑÑÑое поле */ 147 case 'empty': 148 var empty = checkFieldEmpty( name ); 149 if ( empty == true ){ 150 errors++; 151 errorsMessage[ name ] = 'empty'; 152 } 153 break; 154 155 /* Email */ 156 case 'email': 157 var email = checkFieldEmail( name ); 158 if( email == true ){ 159 errors++; 160 errorsMessage[ name ] = 'email'; 161 } 162 break; 163 164 case 'number': 165 var number = checkFieldNumber( name ); 166 if( number == true ){ 167 errors++; 168 errorsMessage[ name ] = 'number'; 169 } 170 break; 171 } 172 /* ÐÑделÑÐ½Ð°Ñ Ð¿ÑовеÑка пеÑеданного обÑекÑа*/ 173 if ( key instanceof Function ){ 174 var result = key( form, name ); 175 if ( result == false ){ 176 errors++; 177 errorsMessage[ name ] = 'function'; 178 showFieldError( name, 'function' ); 179 } 180 } 181 }; 182 183 /* ÐÑовеÑÑÐµÑ Ð¿ÑÑÑÑе Ð¿Ð¾Ð»Ñ */ 184 var checkFieldEmpty = function( name ){ 185 186 /* ÐÐ»Ñ input Ñип checkbox и radio */ 187 if($('input[name="'+ name +'"][type="checkbox"], input[name="'+ name +'"][type="radio"]', form).length > 0){ 188 var value = $('input[name="'+ name +'"]', form).is(':checked'); 189 if(value == false){ 190 showFieldError(name, 'empty'); 191 return true; 192 } 193 } 194 195 /* ÐÐ»Ñ input Ñип file */ 196 if($('input[name="'+ name +'"][type="file"]', form).length > 0){ 197 var file_api = ( window.File && window.FileReader && window.FileList && window.Blob ) ? true : false, 198 file_input = $('input[name="'+ name +'"][type="file"]', form), 199 value; 200 if( file_api && file_input[ 0 ].files[ 0 ] ){ 201 value = file_input[ 0 ].files[ 0 ].name; 202 } else { 203 value = file_input.val().replace( "C:\\fakepath\\", '' ); 204 } 205 if(value.length == 0){ 206 showFieldError(name, 'empty'); 207 return true; 208 } 209 } 210 211 /* ÐÐ»Ñ input Ñип text */ 212 if($('input[name="'+ name +'"]', form).length > 0){ 213 var value = $('input[name="'+ name +'"]', form).val(); 214 if(value.length == 0){ 215 showFieldError(name, 'empty'); 216 return true; 217 } 218 } 219 220 /* ÐÐ»Ñ textarea */ 221 if($('textarea[name="'+ name +'"]', form).length > 0){ 222 var value = $('textarea[name="'+ name +'"]', form).val(); 223 if(value.length == 0){ 224 showFieldError(name, 'empty'); 225 return true; 226 } 227 } 228 229 /* ÐÐ»Ñ select */ 230 if($('select[name="'+ name +'"]', form).length > 0){ 231 var value = $('select[name="'+ name +'"]', form).val(); 232 if(value.length == 0){ 233 showFieldError(name, 'empty'); 234 return true; 235 } 236 } 237 238 return false;
239 240 }; 241 242 /* ÐодÑвеÑÐ¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð»Ñ Ñ ÐºÐ¾ÑоÑÑÑ Ñказан Ñип пÑовеÑки email */ 243 var checkFieldEmail = function( name ){ 244 245 /* ÐÐ»Ñ input */ 246 if( $( 'input[name="' + name + '"]', form ).length > 0){ 247 var value = $( 'input[name="' + name + '"]', form ).val(); 248 reg = new RegExp("[0-9a-z_\\-]+@[0-9a-z\\-_^.]+\\.[a-z]{2,10}", 'i' ); 249 if( !reg.test( value )){ 250 showFieldError( name, 'email' ); 251 return true; 252 } 253 else { 254 return false; 255 } 256 } 257 258 /* ÐÐ»Ñ textarea */ 259 if( $( 'textarea[name="' + name + '"]', form ).length > 0){ 260 var value = $( 'textarea[name="' + name + '"]', form ).val(); 261 reg = new RegExp("[0-9a-z_\\-]+@[0-9a-z\\-_^.]+\\.[a-z]{2,10}", 'i'); 262 if( !reg.test( value ) ){ 263 showFieldError( name, 'email' ); 264 return true; 265 } 266 else { 267 return false; 268 } 269 } 270 271 /* ÐÐ»Ñ select */ 272 if( $( 'select[name="' + name + '"]', form ).length > 0){ 273 var value = $( 'select[name="' + name + '"]', form ).val(); 274 reg = new RegExp("[0-9a-z_\\-]+@[0-9a-z\\-_^.]+\\.[a-z]{2,10}", 'i' ); 275 if( !reg.test( value ) ){ 276 showFieldError( name, 'email' ); 277 return true; 278 } 279 else { 280 return false; 281 } 282 } 283 284 }; 285 286 /* ÐодÑвеÑÐ¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð»Ñ Ñ ÐºÐ¾ÑоÑÑÑ Ñказан Ñип пÑовеÑки number */ 287 var checkFieldNumber = function( name ){ 288 289 /* ÐÐ»Ñ input */ 290 if($( 'input[name="' + name + '"]', form ).length > 0){ 291 var value = $( 'input[name="'+ name +'"]', form ).val(); 292 reg = new RegExp("[0-9]", 'i' ); 293 if( !reg.test( value ) ){ 294 showFieldError( name, 'number'); 295 return true; 296 } 297 else { 298 return false; 299 } 300 } 301 302 /* ÐÐ»Ñ textarea */ 303 if( $( 'textarea[name="' + name + '"]', form ).length > 0){ 304 var value = $( 'textarea[name="'+ name +'"]', form ).val(); 305 reg = new RegExp("[0-9]", 'i' ); 306 if( !reg.test( value ) ){ 307 showFieldError( name, 'number' ); 308 return true; 309 } 310 else { 311 return false; 312 } 313 } 314 315 /* ÐÐ»Ñ select */ 316 if( $( 'select[name="' + name + '"]', form ).length > 0){ 317 var value = $( 'select[name="' + name + '"]', form ).val(); 318 reg = new RegExp("[0-9]", 'i' ); 319 if( !reg.test( value ) ){ 320 showFieldError( name, 'number' ); 321 return true; 322 } 323 else { 324 return false; 325 } 326 } 327 328 }; 329 330 /* ÐÑÐ²Ð¾Ð´Ð¸Ñ Ð¾Ñибки коÑоÑÑе пÑÐ¸Ñ Ð¾Ð´ÑÑ Ñ ÑеÑвеÑа */ 331 var showAllErrors = function( errors ){ 332 for( key in errors ){ 333 showFieldError( key, errors[ key ]); 334 } 335 }; 336 337 /* ÐÑÑÑÐµÑ Ð²Ñе оÑибки в ÑоÑме */ 338 var hideAllErrors = function(){ 339 errors = 0; 340 errorsMessage = {}; 341 /* УбиÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки Ñ Ñегов полей */ 342 if ( options.errorInput ){ 343 $( 'input', form ).removeClass( options.errorClass ); 344 $( 'textarea', form ).removeClass( options.errorClass ); 345 $( 'select', form ).removeClass( options.errorClass ); 346 } 347 /* УбиÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑ Ð¾Ñибки Ñ Ð»ÐµÐ¹Ð±Ð»Ð¾Ð² */ 348 if( options.errorLabel ){ 349 var label = $( 'label', form ).removeClass( options.errorClass ); 350 } 351 /* ÐÑÑÑÐµÑ ÑообÑение об оÑÐ¸Ð±ÐºÐ°Ñ */ 352 if( options.errorMessage ){ 353 $( options.message, form ).hide(); 354 } 355 }; 356 357 /* ÐÑÑÑÐµÑ Ð¾Ñибки Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑлеменÑа ÑоÑÐ¼Ñ */ 358 var hideError = function( elem ){ 359 /* УбиÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑ error */ 360 if( options.errorInput ){ 361 elem.removeClass( options.errorClass ); 362 } 363 /* УбиÑÐ°ÐµÑ ÐºÐ»Ð°ÑÑ error Ñ label Ð´Ð»Ñ ÑлеменÑа */ 364 if( options.errorLabel ){ 365 // ÐÑем label Ñ id как на ÑлеменÑе 366 var label = $( 'label[for="' + elem.attr('id') + '"]' ); 367 // еÑли Ñакой label еÑÑÑ ÑбиÑаем клаÑÑ Ð¾Ñибки еÑли Ð½ÐµÑ Ð¸Ñем ÑодиÑелÑÑкий label и ÑдалÑем клаÑÑ Ñ Ð½ÐµÐ³Ð¾ 368 if ( label.length > 0 ){ 369 label.removeClass( options.errorClass ); 370 } else if ( elem.parent().get( 0 ).tagName == 'LABEL' ){ 371 elem.parent().removeClass( options.errorClass ); 372 } 373 } 374 /* ÐÑÑÑем ÑообÑение Ñ Ð¾Ñибкой */ 375 if( options.errorMessage ){ 376 var message = $( options.message + '[' + options.messageConnector + '="' + elem.attr( 'name' ) + '"]', form ); 377 message.fadeOut( 100 ); 378 } 379 }; 380 381 /* ÐоказÑÐ²Ð°ÐµÑ Ð°Ð»ÐµÑÑ */ 382 var showAlert = function(errors){ 383 var counter = 0; 384 for ( key in errors ){ 385 if ( options.alerts[ key ] && counter < 1){ 386 var alert = $( options.alert, form ); 387 var error = errors[ key ]; 388 alert.empty().append( options.alerts[ key ][ error ] ).show(); 389 if( options.alertCallback instanceof Function ){ 390 options.alertCallback( errors ); 391 } 392 } 393 counter++; 394 } 395 }; 396 397 /* СкÑÑÐ²Ð°ÐµÑ */ 398 var hideAlert = function(){ 399 $( options.alert, form ).hide(); 400 }; 401 402 /* ÐлокиÑÑÐµÑ ÑоÑÐ¼Ñ */ 403 var blockForm = function(){ 404 $( 'input[type="submit"]', form ).attr( 'disabled','disabled' ); 405 $( 'button', form ).attr( 'disabled','disabled' ); 406 }; 407 408 /* Ð¡Ð½Ð¸Ð¼Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ ÑоÑÐ¼Ñ */ 409 var unblockForm = function(){ 410 $( 'input[type="submit"]', form ).removeAttr( 'disabled' ); 411 $( 'button', form ).removeAttr( 'disabled' ); 412 }; 413 414 /* ÐозвÑаÑÐ°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ð¿Ð¾Ð»ÐµÐ¹ = знаÑений */ 415 var getFormDataObject = function(){ 416 var formData = form.serializeArray(); 417 var dataOut = {}; 418 for( key in formData ){ 419 dataOut[ formData[ key ].name ] = formData[ key ].value; 420 } 421 return dataOut; 422 }; 423 424 /* ÐонвеÑÑиÑÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ */ 425 var convertData = function( formData ){ 426 if( !options.convertData instanceof Object ){ return; } 427 for( convertKey in options.convertData ){ 428 if( options.convertData[ convertKey ] instanceof Function ){ 429 var result = options.convertData[ convertKey ](formData[ convertKey ]); 430 formData[ convertKey ] = result; 431 } 432 } 433 return formData; 434 }; 435 436 /* УдалÑÐµÑ Ð»Ð¸Ñние даннÑе пÑи ÑабмиÑе ÑоÑÐ¼Ñ */ 437 var deleteData = function( formData ){ 438 for( key in options.deleteData ){ 439 delete formData[ options.deleteData[ key ] ]; 440 } 441 return formData; 442 }; 443 444 /* ÐÑпÑавка ÑоÑÐ¼Ñ */ 445 var formSubmit = function(){ 446 447 /* ÐеÑеменнÑе */ 448 var formData, 449 convertLength = 0; 450 451 /* ÐонвеÑÑиÑÑÐµÑ Ð² ÑоÑÐ¼Ð°Ñ Ð´Ð»Ñ json */ 452 formData = getFormDataObject(); 453 454 /* ÐонвеÑÑиÑÑÐµÑ Ð¿Ð¾Ð»Ñ Ð¿Ð¾ пеÑеданнÑм ÑÑнкÑиÑм */ 455 if ( options.convertData instanceof Object ){ 456 convertLength = $.map( options.convertData, function( n, i ) { return i; }).length; 457 if ( convertLength > 0 ){ 458 formData = convertData( formData ); 459 } 460 } 461 462 /* ÐобавлÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе из mixinData повеÑÑ Ð´Ð°Ð½Ð½ÑÑ ÑоÑÐ¼Ñ */ 463 if ( options.mixinData instanceof Function ){ 464 mixinData = options.mixinData(); 465 formData = $.extend( formData, mixinData || {} ); 466 } 467 468 /* УдалÑÐµÑ Ð»Ð¸Ñние даннÑе */ 469 if ( options.deleteData instanceof Object ){ 470 formData = deleteData( formData ); 471 } 472 473 /* ÐÑзÑÐ²Ð°ÐµÑ callback пÑи ÑабмиÑе */ 474 if ( options.submitCallback instanceof Function ){ 475 options.submitCallback( form, formData ); 476 } 477 478 $.ajax({ 479 type: options.type, 480 url: dataUrl, 481 dataType: options.dataType, 482 data: formData, 483 xhrFields: { 484 withCredentials: true 485 }, 486 error: function( data ){ 487 /* ÐÑÑÑÐµÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑÐ¾Ñ Ð·Ð°Ð³ÑÑзки */ 488 loader.fadeOut(); 489 /* ÐÑзÑÐ²Ð°ÐµÑ Ñallback оÑибки валидаÑии ÑоÑÐ¼Ñ */ 490 if( options.errorCallback instanceof Function ){ 491 options.errorCallback( data ); 492 } 493 }, 494 success: function( data ){ 495 /* ÐÑÑÑÐµÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑÐ¾Ñ Ð·Ð°Ð³ÑÑзки */ 496 loader.fadeOut(); 497 /* Ð¡Ð½Ð¸Ð¼Ð°ÐµÑ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ñ ÑоÑÐ¼Ñ */ 498 if( options.block == true ){ 499 unblockForm(); 500 } 501 if( data.error || ( data.status && data.status.toLowerCase() == 'error' )){ 502 /* ÐоказÑÐ²Ð°ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ */ 503 showAllErrors( data.errors ); 504 /* ÐоказÑÐ²Ð°ÐµÑ Ð°Ð»ÐµÑÑÑ */ 505 if( options.alerts && options.errorAlert ){ 506 showAlert( data.errors ); 507 } 508 /* ÐÑзÑÐ²Ð°ÐµÑ Ñallback оÑибки валидаÑии ÑоÑÐ¼Ñ */ 509 if( options.errorCallback instanceof Function ){ 510 options.errorCallback(data); 511 } 512 } 513 else{ 514 /* ÐÑзÑÐ²Ð°ÐµÑ Ñallback ÑÑпеÑной валидаÑии ÑоÑÐ¼Ñ */ 515 if( options.successCallback instanceof Function ){ 516 options.successCallback( data, form ); 517 } 518 } 519 /* ÐÑзÑÐ²Ð°ÐµÑ force Ñallback */ 520 if( options.forceCallback instanceof Function ){ 521 options.forceCallback( data, form ); 522 } 523 } 524 }); 525 526 }; 527 528 /* СобÑÑвеннÑе ÑобÑÑÐ¸Ñ */ 529 form.bind( 'hideErrors', function(){ 530 hideAllErrors(); 531 }); 532 533 534/* СÐÐЫТÐЯ */ 535 536 /* Ð¡Ð°Ð±Ð¼Ð¸Ñ ÑоÑÐ¼Ñ */ 537 form.off( 'submit' ).on( 'submit', function( e ){ 538 539 e.preventDefault(); // оÑменÑÐµÑ Ð¾ÑпÑÐ°Ð²ÐºÑ ÑоÑÐ¼Ñ 540 541 hideAllErrors(); // пÑÑÑÐµÑ Ð¾Ñибки 542 hideAlert(); // пÑÑÑÐµÑ Ð°Ð»ÐµÑÑÑ 543 544 /* ÐÑовеÑÑÐµÑ Ð¾Ð±ÑзаÑелÑнÑе Ð´Ð»Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ñ */ 545 errors = checkRules(); 546 547 /* ÐÑзÑÐ²Ð°ÐµÑ callback и пеÑÐµÐ´Ð°ÐµÑ Ð² него обÑÐµÐºÑ Ñ Ð¾Ñибками */ 548 if( errors > 0 && options.errorCallback instanceof Function ){ 549 options.errorCallback( errorsMessage ); 550 } 551 552 // еÑли Ð½ÐµÑ Ð¾Ñибок в полÑÑ 553 if ( errors == 0 ){ 554 555 /* ÐоказÑÐ²Ð°ÐµÑ Ð¸Ð½Ð´Ð¸ÐºÐ°ÑÐ¾Ñ Ð·Ð°Ð³ÑÑзки */ 556 loader.fadeIn(); 557 558 /* СÑÐ°Ð²Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²ÐºÑ Ð½Ð° ÑоÑÐ¼Ñ ÑÑо Ð±Ñ Ð¸ÑклÑÑиÑÑ Ð¿Ð¾Ð²ÑоÑнÑе sÑабмиÑÑ */ 559 if( options.block == true ){ 560 blockForm(); 561 } 562 563 /* ÐÑовеÑка на невидимое поле recaptcha */ 564 if ( $( 'input[name="g-recaptcha-response"]', form ).length ) { 565 checkCaptchaToken({ 566 callback: function(token) { 567 $('input[name=g-recaptcha-response]', form).val(token); 568 formSubmit(); 569 } 570 }) 571 } else { 572 formSubmit(); 573 } 574 } 575 }); 576 577 /* УбÑаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ input и textarea пÑи изменении */ 578 $( 'input, textarea', form ).on( 'keydown', function(){ 579 hideError( $( this ) ); 580 }); 581 582 /* УбÑаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ select и input[type="checkbox"] пÑи изменении */ 583 $( 'input[type="checkbox"], select', form ).on( 'change', function(){ 584 hideError( $( this ) ); 585 }); 586 587 /* УбÑаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ input[type="radio"] пÑи изменении*/ 588 $( 'input[type="radio"]', form ).on( 'change', function(){ 589 // иÑем вÑе radio Ñ name как Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ð¾Ð³Ð¾ и ÑбиÑаем оÑÐ¸Ð±ÐºÑ Ñо вÑÐµÑ 590 $( 'input[type="radio"][name="' + $( this ).attr( 'name') + '"]', form ).each( function(){ 591 hideError( $( this ) ); 592 }); 593 }); 594 595 return version; 596 597 } 598 599})( jQuery );
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.