1. JavaScript / Говнокод #16257

    +157

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    $('.send_message').click(function(e){
    	e.preventDefault();
    
    	var error = false;
    	var name = $('#contact_form_holder'+this.id).find('#name').val();
    	var email = $('#contact_form_holder'+this.id).find('#email').val();
    	var phone = $('#contact_form_holder'+this.id).find('#phone').val();
    	var subject = $('#contact_form_holder'+this.id).find('#subject').val();
    	var message = $('#contact_form_holder'+this.id).find('#message').val();
    
    	if(name.length == 0){
    		var error = true;
    		$('#contact_form_holder'+this.id).find(".name_field").addClass('error1');
    	}else{
    		$('#contact_form_holder'+this.id).find(".name_field").addClass('success');
    	}
    	if(email.length == 0 || email.indexOf('@') == '-1'){
    		var error = true;
    		$('#contact_form_holder'+this.id).find(".email_field").addClass('error1');
    	}else{
    		$('#contact_form_holder'+this.id).find(".email_field").addClass('success');
    	}
    	if(phone.length == 0){
    		var error = true;
    		$('#contact_form_holder'+this.id).find(".phone_field").addClass('error1');
    	}else{
    		$('#contact_form_holder'+this.id).find(".phone_field").addClass('success');
    	}
    		if(subject.length == 0){
    			var error = true;
    			$('#contact_form_holder'+this.id).find(".subject_field").addClass('error1');
                }else{
    				$('#contact_form_holder'+this.id).find(".subject_field").addClass('success');
                }
    	   if(message.length == 0){
                    var error = true;
    				$('#contact_form_holder'+this.id).find(".message_field").addClass('error1');
                }else{
    				$('#contact_form_holder'+this.id).find(".message_field").addClass('success');
                }
    				if(error == false){
    					$('#contact_form_holder'+this.id).find('.send_message').attr({'disabled' : 'true', 'value' : 'Sending...' });
    					$formVar = this.id;
    
    					 $.post('send_email.php', $('#contact_form_holder'+$formVar).find('#contact_form').serialize(),function(result){
    						 if(result == 'sent'){
    							$('#contact_form_holder'+$formVar).find(".cf_submit_p").remove();
    							$('#contact_form_holder'+$formVar).find('#mail_success').fadeIn(500);
    						}else{
    							$('#contact_form_holder'+$formVar).find('#mail_fail').fadeIn(500);
    							$('#contact_form_holder'+$formVar).find('.send_message').removeAttr('disabled').attr('value', 'Send The Message');
    						}
    					});
    
    				if(error == false){
    				$('#send_message').attr({'disabled' : 'true', 'value' : 'Sending...' });
    					$.post("send_email.php", $("#contact_form").serialize(),function(result){
    						if(result == 'sent'){
    							$('#cf_submit_p').remove();
    							$('#mail_success').fadeIn(500);
    						}else{
    							$('#mail_fail').fadeIn(500);
    							$('#send_message').removeAttr('disabled').attr('value', 'Send The Message');
    						}
    					});
    				}
    				}
            });
    });

    Форма обратной связи, сайт веб-студии:
    http://medialine.by/job/js/script.js

    Запостил: grishko, 30 Июня 2014

    Комментарии (16) RSS

    • мои глаза
      var name = $('#contact_form_holder'+this.id).find('#name').val();
      они разве не в курсе, что у элементов должен быть уникальный идентификатор?
      да и вообще, в их случае jquery.unobtrusive-ajax.js && jquery.unobtrusive-validation.js решат все их проблемы
      Ответить
      • Зато есть красивая анимация - всем похуй.
        Ответить
      • А в каком месте тут неуникальные? Хотя да, поиск подозрительный...
        А вот кто классы снимать будет, если кнопку второй раз нажать?
        Ответить
        • в jquery find http://api.jquery.com/find/ ищет среди потомком элемента, который был выбран в селекторе.
          соответственно, у них там штук 5 contact_form_holder, к которым прибавляется id, и там он уже ищет потомков с нужным идентификатором.
          Ответить
          • Про find я знаю.
            Действительно, при таком поиске всорее всего неуникальные. Хотя, если там кусок разметки выбрасывается/вставляется, то могут быть и уникальными.
            Ответить
      • К стати, давно меня эта тема с unobtrusive интересует.
        Если в вёрстке нет явных маркетов, что на объект подвешено n событий, то можно невзначай разрушить логику работы скрипта и узнать об этом только в момент тестирования или от клиента.

        Получается, что прятать в скрипт привязку к вёрстке - это заранее заложить логическую мину.
        Есть некие варианты решения этой проблемы? Или остаётся уповать на человеческий фактор?
        Ответить
        • ну, это не будет работать, только если кто-то рукожоп.
          в asp.net MVC автоматически генерится все метоописание для валидации элементов управления, на основе аттрибутов класса модели, который jquery валидатор отлично проглатывает.

          проще говоря, мне достаточно в модели написать
          class myClass{
          [Required]
          public string FieldName{ get;set;}
          }


          а потом в представлении @Html.EditorFor(x=> x.FieldName)
          и все будет работать на автомате, если только конечно на клиенте никто не захочет отключить JavaScript, или изменить скрипт валидации, но даже в этом случае, на сервере пройдет повторная валидации, и я смогу определить, что на том конце провода меня пытаются наебать, и обойти валидацию

          и не надо только говорить, что фарш типа сабжа, который ты напишешь для валидации формы будет лучше проекта, который пилят уже несколько лет.
          Ответить
          • Для додиеза-то понятно. Наверняка придумали кучу обёрток. Тот-же knockoutjs очень неплохо дружит с M$'овским MVC.
            Но вот сайт medialine.by написан на апаче. И врятли на vNext'е с моной.
            Ответить
    • if(email.length == 0 || email.indexOf('@') == '-1'){

      Шедевральная проверка)))
      Ответить
      • Это как раз нормальная проверка (кроме того факта что -1 строкой). На клиенте только это и нужно проверять.
        Ответить
        • Я как раз про эту строку.
          Да и порверка на пустую строку тут лишняя по сути. И что-то мне кажется, что поризводительность от этой проверки вряд ли улучшится...
          Ответить
          • а ничего, что, если указать там только @, то он схавает этот email?
            Ответить
      • собака - тоже человек^W Email
        Ответить

    Добавить комментарий