1 2var replaceWithUnicode = false; 3var errorClass = 'input-feedback-error'; 4 5function setErrorClass(customClass){ 6 window.errorClass = customClass; 7} 8 9function getErrorMessage(ruleName, ruleParam, $input) { 10 var inputTitle = $($input).data('validate-title') || $($input).attr('name') || $($input).attr('id'); 11 switch (ruleName) { 12 case 'required': return 'Lütfen boÅ bırakmayınız.'; 13 case 'name_surname': return 'Lütfen geçerli bir ad soyad bilgisi giriniz.'; 14 case 'company_name': return 'Lütfen geçerli bir firma adı bilgisi giriniz.'; 15 case 'minwords': return `Lütfen en az ${ruleParam} kelime giriniz.`; 16 case 'min': return `Lütfen en az ${ruleParam} karakter giriniz.`; 17 case 'max': return `Lütfen en fazla ${ruleParam} karakter giriniz.`; 18 case 'email': return 'Lütfen geçerli bir e-posta adresi giriniz.'; 19 case 'domain': return 'Lütfen geçerli bir alan adı giriniz.'; 20 case 'domain_xn': return 'Lütfen geçerli bir alan adı giriniz (Türkçe karakter içermemelidir).'; 21 case 'numeric': return 'Lütfen sadece sayısal deÄer giriniz.'; 22 case 'phone_number': return 'Lütfen geçerli bir telefon numarası giriniz.'; 23 case 'phone_body': return 'Telefon numarası 0 ile baÅlamamalı ve 10-13 hane olmalıdır. Ãrnek: 5321234567'; 24 case 'lower': return 'Lütfen sadece küçük harfler kullanınız.'; 25 case 'upper': return 'Lütfen sadece büyük harfler kullanınız.'; 26 case 'alpha': return 'Lütfen sadece alfabetik karakterler kullanınız.'; 27 case 'alpha_num': return 'Lütfen sadece harf ve rakam kullanınız.'; 28 case 'alpha_num_punct': return 'Lütfen sadece harf, rakam ve noktalama iÅaretleri kullanınız.'; 29 case 'no_turkish_chars': return 'Lütfen Türkçe karakter kullanmayınız.'; 30 case 'regex': return 'Geçerli bir formatta deÄer giriniz.'; 31 case 'confirmed': 32 var confirmField = $("#" + ruleParam); 33 var confirmFieldTitle = confirmField.data('validate-title') || confirmField.attr('name') || confirmField.attr('id'); 34 return `${inputTitle} alanının, ${confirmFieldTitle} alanı ile aynı olması gerekir.`; 35 case 'either': 36 case 'either_check': 37 var fields = ruleParam.split(','); 38 var fieldNames = fields.map(function(fieldId) { 39 var $field = $("#" + fieldId); 40 return $field.data('validate-title') || $field.attr('name') || $field.attr('id'); 41 }); 42 return `${fieldNames.join(', ')} alanlarından en az bir alanın doldurulması gerekir.`; 43 case 'dependent_on': 44 var dependentField = $("#" + ruleParam); 45 var dependentFieldName = dependentField.data('validate-title') || dependentField.attr('name') || dependentField.attr('id'); 46 return `Bu alan, ${dependentFieldName} alanı gönderildiÄinde zorunludur.`; 47 case 'only_one': 48 case 'only_one_check': 49 var fields = ruleParam.split(','); 50 var fieldNames = fields.map(function(fieldId) { 51 var $field = $("#" + fieldId); 52 return $field.data('validate-title') || $field.attr('name') || $field.attr('id'); 53 }); 54 return `${fieldNames.join(', ')} alanlarından sadece bir alanın doldurulması gerekir.`; 55 case 'active_url': return 'Lütfen geçerli bir URL giriniz.'; 56 case 'alpha_dash': return 'Lütfen yalnızca harfler, rakamlar, tire (-) ve alt çizgi (_) kullanınız.'; 57 case 'digits_between': return `Lütfen ${ruleParam.split(',')[0]} ile ${ruleParam.split(',')[1]} arasında bir sayı giriniz.`; 58 case 'different': return 'Bu alan, belirtilen alandan farklı olmalıdır.'; 59 case 'in': return `Lütfen ${ruleParam.split(',').join(", ")} deÄerlerinden birini giriniz.`; 60 case 'ip': return 'Lütfen geçerli bir IP adresi giriniz.'; 61 case 'not_in': return `Girilen deÄer ${ruleParam.split(',').join(", ")} deÄerlerinden birisi olmamalıdır.`; 62 case 'tc_no': return 'Lütfen geçerli bir TC kimlik numarası giriniz.'; 63 case 'tax_no': return 'Lütfen geçerli bir vergi numarası giriniz.'; 64 case 'must_check': return 'Devam etmek için lütfen bu alanı iÅaretleyin'; 65 default: return ''; 66 } 67} 68 69function validateEmail(value) { 70 var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/; 71 return emailPattern.test(value); 72} 73 74function validateDomain(value, trChar) { 75 // TODO: iso dosyalarda türkçe karakter hatası alınıyor ise alttaki no_turkish_char 76 // metodundaki gibi bunun da güncellenmezi gerekiyor. 77 if (trChar) { 78 var domainRegexTr = /^(?:[a-z0-9üöçıÅÄ]+(?:[\-\.][a-z0-9üöçıÅÄ]+)*|xn--[a-z0-9\-]+)\.[a-züöçıÅÄ]{2,6}$/i; 79 return domainRegexTr.test(value); 80 } else { 81 var domainRegexNonTr = /^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}$/i; 82 return domainRegexNonTr.test(value); 83 } 84} 85 86function validateNumeric(value) { 87 return $.isNumeric(value); 88} 89 90function validatePhoneNumber(value) { 91 // Format 1: (123) 456 78 90 92 const formattedRegex = /^\(\d{3}\)\s\d{3}\s\d{2}\s\d{2}$/; 93 94 // Format 2: 10 veya 11 haneli sadece rakam içeren (örn: 5551234567 veya 05551234567) 95 const plainRegex = /^\d{10,11}$/; 96 97 return formattedRegex.test(value) || plainRegex.test(value); 98} 99 100function validatePhoneBody(value) { 101 // Alan kodundan sonraki telefon govdesi: 10-13 hane, 0 ile baslamaz, sadece rakam 102 const phoneBodyRegex = /^[1-9]\d{9,12}$/; 103 return phoneBodyRegex.test(value); 104} 105 106function validateLower(value) { 107 return value === value.toLowerCase(); 108} 109 110function validateUpper(value) { 111 return value === value.toUpperCase(); 112} 113 114function validateNameSurname(value) { 115 var alphaPattern = /^[a-zA-ZçÃÄÄıİöÃÅÅüÃ]{2,}( [a-zA-ZçÃÄÄıİöÃÅÅüÃ]{2,})+$/; 116 if (replaceWithUnicode) { 117 value = replaceTurkishCharsWithUnicode(value, replaceWithUnicode); 118 alphaPattern = /^[a-zA-Z\u00e7\u00c7\u011f\u011e\u0131\u0130\u00f6\u00d6\u015f\u015e\u00fc\u00dc]{2,}( [a-zA-Z\u00e7\u00c7\u011f\u011e\u0131\u0130\u00f6\u00d6\u015f\u015e\u00fc\u00dc]{2,})+$/; 119 return alphaPattern.test(value); 120 } 121 122 return alphaPattern.test(value); 123} 124 125function validateCompanyName(value) { 126 var alphaPattern = /^[a-zA-ZçÃÄÄıİöÃÅÅüÃ0-9&.,' -]{2,}$/; 127 128 if (replaceWithUnicode) { 129 value = replaceTurkishCharsWithUnicode(value, replaceWithUnicode); 130 alphaPattern = /^[a-zA-Z\u00e7\u00c7\u011f\u011e\u0131\u0130\u00f6\u00d6\u015f\u015e\u00fc\u00dc0-9&.,' -]{2,}$/; 131 return alphaPattern.test(value); 132 } 133 134 return alphaPattern.test(value); 135} 136 137function validateAlpha(value) { 138 var alphaPattern = /^[A-Za-zçÃÄÄıİöÃÅÅüÃ\s]+$/; 139 140 value = value.trim(); 141 if (replaceWithUnicode) { 142 value = replaceTurkishCharsWithUnicode(value, replaceWithUnicode); 143 alphaPattern = /^[A-Za-z\u00e7\u00c7\u011f\u011e\u0131\u0130\u00f6\u00d6\u015f\u015e\u00fc\u00dc\s]+$/; 144 return alphaPattern.test(value); 145 } 146 return alphaPattern.test(value); 147} 148 149function validateAlphaNum(value) { 150 var alphaNumPattern = /^[A-Za-z0-9çÃÄÄıİöÃÅÅüÃ\s]+$/; 151 152 value = value.trim(); 153 if (replaceWithUnicode) { 154 value = replaceTurkishCharsWithUnicode(value, replaceWithUnicode); 155 alphaNumPattern = /^[A-Za-z0-9\u00e7\u00c7\u011f\u011e\u0131\u0130\u00f6\u00d6\u015f\u015e\u00fc\u00dc\s]+$/; 156 return alphaNumPattern.test(value); 157 } 158 return alphaNumPattern.test(value); 159} 160 161function validateMin(value, minLength) { 162 value = value.trim(); 163 return value.length >= minLength; 164} 165 166function validateMax(value, maxLength) { 167 value = value.trim(); 168 return value.length <= maxLength; 169} 170 171function validateRequired(value) { 172 return value !== null && value !== undefined && value.trim() !== '' && value !== 'default'; 173} 174 175function validateRegex(value, pattern) { 176 var regexPattern = new RegExp(pattern); 177 return regexPattern.test(value); 178} 179 180function validateConfirmed(value, confirmValue) { 181 var confirmedInput = $("#" + confirmValue); 182 return value === confirmValue.val(); 183} 184 185function validateEither(fields) {
186 var validateList = []; 187 $.each(fields, function (key, field){ 188 var value = $('#'+field).val() 189 if (value.trim() !== ''){ 190 validateList.push(value) 191 } 192 }) 193 return validateList.length >= 1; 194} 195 196function validateEitherCheck(fields) { 197 var validateList = []; 198 $.each(fields, function (key, field){ 199 var value = $('#'+field).is(':checked') 200 if ($('#'+field).is(':checked')){ 201 validateList.push(value) 202 } 203 }) 204 return validateList.length >= 1; 205} 206 207function validateDependentOn(value, ruleParams) { 208 var dependentParams = ruleParams.split(','); 209 var dependentInput = $("#" + dependentParams[0]); 210 if (dependentInput.val() == null) { 211 return false; 212 } 213 214 if (dependentParams[1] !== undefined){ 215 return dependentInput.val().trim() === dependentParams[1] 216 } 217 return dependentInput.val().trim() !== ''; 218} 219 220function validateDependentOnNot(value, ruleParams) { 221 var dependentParams = ruleParams.split(','); 222 var dependentInput = $("#" + dependentParams[0]); 223 if (dependentInput.val() == null) { 224 return false; 225 } 226 227 if (dependentParams[1] !== undefined){ 228 return dependentInput.val().trim() !== dependentParams[1] 229 } 230 return dependentInput.val().trim() !== ''; 231} 232 233function validateDependentOnCheck(value, dependentElement) { 234 var dependentInput = $("#" + dependentElement); 235 console.log(dependentInput.prop('checked')); 236 return dependentInput.prop('checked'); 237} 238 239function validateDependentOnCheckNot(value, dependentElement) { 240 var dependentInput = $("#" + dependentElement); 241 console.log(dependentInput.is(':checked')); 242 return !dependentInput.is(':checked'); 243} 244 245function validateOnlyOne(fields) { 246 var validateList = []; 247 $.each(fields, function (key, field){ 248 var value = $('#'+field).val() 249 if (value.trim() !== ''){ 250 validateList.push(value) 251 } 252 }) 253 return validateList.length = 1; 254} 255 256function validateOnlyOneCheck(fields) { 257 var validateList = []; 258 $.each(fields, function (key, field){ 259 var value = $('#'+field).is(':checked') 260 if ($('#'+field).is(':checked')){ 261 validateList.push(value) 262 } 263 }) 264 return validateList.length == 1; 265} 266 267function validateActiveUrl(value) { 268 var urlPattern = /^(https?:\/\/)?((\d{1,3}\.){3}\d{1,3}|[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(:\d+)?(\/[^\s]*)?$/i; 269 return urlPattern.test(value); 270} 271 272function validateAlphaDash(value) { 273 var alphaDashPattern = /^[A-Za-z0-9_-]+$/; 274 return alphaDashPattern.test(value); 275} 276 277function validateAlphaNumPunct(value) { 278 // Harf, rakam, Türkçe karakterler, boÅluk, noktalama ve metin düzenleme karakterleri 279 // Emoji'leri ve diÄer özel karakterleri engeller 280 // Desteklenen: alt tire (_), üst tire (^), en/em dash (ââ), akıllı tırnak (''"""), ellipsis (â¦), derece (°), vb. 281 var alphaNumPunctPattern = /^[A-Za-z0-9çÃÄÄıİöÃÅÅüÃ\s_\-\.!?,;:'"()\[\]{}\/\\@#$%^&*+=~`|<>ââ''""â¦Â·Â°]*$/; 282 return alphaNumPunctPattern.test(value); 283} 284 285function validateDigitsBetween(value, min, max) { 286 var numericValue = parseInt(value, 10); 287 return !isNaN(numericValue) && numericValue >= min && numericValue <= max; 288} 289 290function validateDifferent(value, compareValue) { 291 var compareInput = $("#" + compareValue); 292 return value !== compareInput.val(); 293} 294 295function validateIn(value, allowedValues) { 296 return allowedValues.split(',').includes(value); 297} 298 299function validateIp(value) { 300 var ipPattern = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; 301 return ipPattern.test(value); 302} 303 304function validateNotIn(value, forbiddenValues) { 305 return !forbiddenValues.split(',').includes(value); 306} 307 308function validateMinWords(value, minWords) { 309 if (!value) return false; 310 return value.trim().split(/\s+/).length >= minWords; 311} 312 313function validateNoTurkishChars(value) { 314 if (replaceWithUnicode) { 315 value = replaceTurkishCharsWithUnicode(value, replaceWithUnicode); 316 const turkishChars = /[\u00e7\u00c7\u011f\u011e\u0131\u0130\u00f6\u00d6\u015f\u015e\u00fc\u00dc]/; 317 return !turkishChars.test(value); 318 } 319 320 const turkishChars = /[çÃÄÄıİöÃÅÅüÃ]/; 321 return !turkishChars.test(value); 322} 323 324function validateNullable(value) { 325 if (!value || value == null || value == '') return false;
326 return true; 327} 328 329function mustCheck(element) { 330 return $(element).is(':checked'); 331} 332 333 334function validateInput(ruleName, value, ruleParam, $input) { 335 switch (ruleName) { 336 case 'required': return validateRequired(value); 337 case 'name_surname': return validateNameSurname(value); 338 case 'company_name': return validateCompanyName(value); 339 case 'minwords': return validateMinWords(value, ruleParam) 340 case 'no_turkish_chars': return validateNoTurkishChars(value) 341 case 'min': return validateMin(value, ruleParam); 342 case 'max': return validateMax(value, ruleParam); 343 case 'email': return validateEmail(value); 344 case 'domain': return validateDomain(value, true); 345 case 'domain_xn': return validateDomain(value, false); 346 case 'numeric': return validateNumeric(value); 347 case 'phone_number': return validatePhoneNumber(value); 348 case 'phone_body': return validatePhoneBody(value); 349 case 'lower': return validateLower(value); 350 case 'upper': return validateUpper(value); 351 case 'alpha': return validateAlpha(value); 352 case 'alpha_num': return validateAlphaNum(value); 353 case 'alpha_num_punct': return validateAlphaNumPunct(value); 354 case 'regex': return validateRegex(value, ruleParam); 355 case 'confirmed': return validateConfirmed(value, ruleParam); 356 case 'either': return validateEither(ruleParam.split(',')); 357 case 'either_check': return validateEitherCheck(ruleParam.split(',')); 358 case 'dependent_on': return validateDependentOn(value, ruleParam); 359 case 'dependent_on_not': return validateDependentOnNot(value, ruleParam); 360 case 'dependent_on_check': return validateDependentOnCheck(value, ruleParam); 361 case 'dependent_on_check_not': return validateDependentOnCheckNot(value, ruleParam); 362 case 'only_one': return validateOnlyOne(ruleParam.split(',')); 363 case 'only_one_check': return validateOnlyOneCheck(ruleParam.split(',')); 364 case 'active_url': return validateActiveUrl(value); 365 case 'alpha_dash': return validateAlphaDash(value); 366 case 'digits_between': return validateDigitsBetween(value, ruleParam.split(',')[0], ruleParam.split(',')[1]); 367 case 'different': return validateDifferent(value, ruleParam); 368 case 'in': return validateIn(value, ruleParam); 369 case 'ip': return validateIp(value); 370 case 'not_in': return validateNotIn(value, ruleParam); 371 case 'nullable': return validateNullable(value); 372 case 'tax_no': return vergiKimlikKontrol(value); 373 case 'tc_no': return tcKimlikKontrol(value); 374 case 'must_check': return mustCheck($input); 375 default: return true; 376 } 377} 378 379function sendApiRequest(getUrl){ 380 var xx = $.ajax({ 381 url: getUrl, 382 success: function (result) { 383 }, 384 async: false 385 }); 386 return JSON.parse(xx.responseText); 387} 388 389function vergiKimlikKontrol(kno){ 390 if (kno.length >= 10){ 391 var data = sendApiRequest('/siberhosting/sepet-fatura-islemleri.php?action=validateTaxNo&tax_no='+kno); 392 if(data == 1){ 393 return true; 394 } 395 } 396 397 return false; 398} 399 400function tcKimlikKontrol(tc_no){ 401 if (tc_no.length >= 11){ 402 var data = sendApiRequest('/siberhosting/sepet-fatura-islemleri.php?action=validateTCNo&tc_no='+tc_no); 403 404 if(data == 1){ 405 return true; 406 } 407 } 408 409 410 return false; 411} 412 413function getValidateRules(element){ 414 var rules = $(element).data('validate'); 415 return rules ? rules.split('|') : []; 416} 417 418function getValidateParams(rule){ 419 return rule.split(':')[1]; 420} 421 422function replaceTurkishCharsWithUnicode(text) { 423 const turkishToUnicode = { 424 "ç": "\u00e7", "Ã": "\u00c7", 425 "Ä": "\u011f", "Ä": "\u011e", 426 "ı": "\u0131", "İ": "\u0130", 427 "ö": "\u00f6", "Ã": "\u00d6", 428 "Å": "\u015f", "Å": "\u015e", 429 "ü": "\u00fc", "Ã": "\u00dc" 430 }; 431 432 $.each(turkishToUnicode, function(char, unicode) { 433 const regex = new RegExp(char, 'g'); 434 text = text.replace(regex, unicode); 435 }); 436 437 return text; 438} 439 440 441 442function processValidation(element, parentElement){ 443 var foundError = false;
444 let foundedRule = ''; 445 var $input = $(element); 446 var errorPosition = $input.data('validate-error-position'); 447 var insertAfterEl = $input; 448 if (errorPosition !== undefined){ 449 insertAfterEl = $('#'+errorPosition) 450 } 451 452 var rules = getValidateRules($input); 453 var value = $input.val(); 454 var errorDiv = $("#" + $input.attr('id') + "_error"); 455 456 for (var i = 0; i < rules.length; i++) { 457 var ruleParts = rules[i].split(':'); 458 var ruleName = ruleParts[0]; 459 var ruleParam = ruleParts[1] || ''; 460 461 462 if (!validateInput(ruleName, value, ruleParam, $input)) { 463 if (ruleName === 'dependent_on' || ruleName === 'dependent_on_check' || 464 ruleName === 'dependent_on_not' || ruleName === 'dependent_on_check_not' || 465 ruleName === 'nullable'){ 466 break; 467 } 468 469 var errorMessage = getErrorMessage(ruleName, ruleParam, $input); 470 if (replaceWithUnicode){ 471 errorMessage = replaceTurkishCharsWithUnicode(errorMessage); 472 } 473 if (errorMessage !== ''){ 474 if (errorDiv.length){ 475 errorDiv.text(errorMessage) 476 }else { 477 addError($input, errorMessage, insertAfterEl) 478 } 479 $('#'+parentElement).data('valid', false); 480 foundError = true; 481 foundedRule = ruleName 482 break; 483 } 484 } 485 } 486 if (!foundError){ 487 if (checkFormHasErrors(parentElement) == 1 && $('#'+$input.attr('id') + '_error').length > 0){ 488 $('#'+parentElement).data('valid', true); 489 } 490 $("#" + $input.attr('id') + "_error").animate( 491 { opacity:0 }, 492 125, function (){ 493 $("#" + $input.attr('id') + "_error").css('opacity', 1) 494 $("#" + $input.attr('id') + "_error").remove(); 495 }); 496 } 497 498 return foundError; 499} 500 501function addError($input, message, insertAfterEl = null){ 502 if (insertAfterEl === null){ 503 insertAfterEl = $input; 504 } 505 506 $('<div>', { 507 id: $input.attr('id') + '_error', 508 text: message[0].toUpperCase() + message.slice(1), 509 }).addClass(window.errorClass).css('opacity', 0).insertAfter(insertAfterEl); 510 511 $("#" + $input.attr('id') + "_error").animate({ opacity:1 }, 125); 512} 513 514function validateForm(parentElement, _replaceWithUnicode = false) { 515 // YAZILIMCININ NOTU: 516 // Burada oluÅturulan validasyon metodları diÄer sayfalarda sorunsuz çalıÅmaktadır. 517 // Validasyonların içeriklerini deÄiÅtirirken eÄer yeterince isteneni kapsamıyor ise 518 // yeni bir metod oluÅturulması gerekiyor. 519 var error = false; 520 replaceWithUnicode = _replaceWithUnicode; 521 $("#" + parentElement).find("*[data-validate]").each(function() { 522 var validateResult = processValidation($(this), parentElement) 523 if (validateResult){ 524 error = true; 525 } 526 }); 527 528 if ($('#'+parentElement+' .input-feedback-error').length == 0 || $('#'+parentElement).data('valid') == true ){ 529 $('#'+parentElement).find('button[type="submit"]').prop('disabled', false).removeClass('disabled') 530 } else { 531 $('#'+parentElement).find('button[type="submit"]').prop('disabled', true).addClass('disabled') 532 } 533 534 return error; 535} 536 537function checkFormHasErrors(parentElement){ 538 return $('#'+parentElement+' .input-feedback-error').length 539} 540 541function prepareValidateListeners(parentElement, _replaceWithUnicode = false, validationEvents = 'change keyup') { 542 replaceWithUnicode = _replaceWithUnicode; 543 validateInputListener(parentElement, validationEvents); 544 validateSelectListener(parentElement); 545} 546 547function unbindValidateListeners(parentElement){ 548 validateInputUnbindListener(parentElement) 549 validateSelectUnbindListener(parentElement) 550} 551 552function validateInputListener(parentElement, validationEvents) { 553 $("#" + parentElement + ' input[data-validate], #' + parentElement + ' textarea[data-validate]').on(validationEvents, function () { 554 var rules = getValidateRules($(this)) 555 $.each(rules, function (key, rule){ 556 if (rule.startsWith('either') || rule.startsWith('either_check') || 557 rule.startsWith('only_one') || rule.startsWith('only_one_check')){ 558 var params = getValidateParams(rule) 559 $.each(params.split(','), function (key, param){ 560 processValidation($('#'+param), parentElement); 561 }) 562 } 563 }) 564 processValidation($(this), parentElement) 565 if (($('#'+parentElement+' .input-feedback-error').length == 0 || $('#'+parentElement).data('valid') == true)){ 566 $('#'+parentElement).find('button[type="submit"]').prop('disabled', false).removeClass('disabled') 567 } else { 568 $('#'+parentElement).find('button[type="submit"]').prop('disabled', true).addClass('disabled') 569 } 570 }) 571} 572function checkRequiredInputs(parentElement){ 573 let errorFound = false;
574 575 let allInputs = $("#" + parentElement).find('[data-validate*="required"]') 576 577 allInputs.each(function (key, input){ 578 if (($(input).attr('type') != 'hidden' && !$(input).hasClass('hidden')) && ($(input).val() === null || $(input).val() === '')){ 579 errorFound = true; 580 } 581 }) 582 583 return errorFound; 584} 585 586function validateInputUnbindListener(parentElement){ 587 $("#" + parentElement + ' input[data-validate]').unbind('change blur'); 588} 589 590function validateSelectListener(parentElement){ 591 $("#" + parentElement + ' select[data-validate]').on('change', function (){ 592 var newValue = $(this).val() 593 var oldValue = $(this).data('validate-old-val') 594 if (oldValue === null || oldValue === ''){ 595 oldValue = newValue 596 $(this).data('validate-old-val', newValue) 597 } 598 599 if (newValue !== oldValue || oldValue === undefined){ 600 processValidation($(this), parentElement) 601 $(this).data('validate-old-val', newValue) 602 } 603 604 if (($('#'+parentElement+' .input-feedback-error').length == 0 || $('#'+parentElement).data('valid') == true)){ 605 $('#'+parentElement).find('button[type="submit"]').prop('disabled', false).removeClass('disabled') 606 } else { 607 $('#'+parentElement).find('button[type="submit"]').prop('disabled', true).addClass('disabled') 608 } 609 }) 610} 611 612function validateSelectUnbindListener(parentElement){ 613 $("#" + parentElement + ' select[data-validate]').unbind('change') 614}
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.