PageSourceSearch

https://www.secuavail.com/contact/js/mailform-js.php

js secuavail.com collected 2026-09-25 14:34:48 UTC 12,128 bytes, 470 lines download raw bytes

1
2/*--------------------------------------------------------------------------
3	
4	Script Name    : Responsive Mailform
5	Author         : FIRSTSTEP - Motohiro Tani
6	Author URL     : https://www.1-firststep.com
7	Create Date    : 2014/03/25
8	Version        : 8.1
9	Last Update    : 2022/12/22
10	
11--------------------------------------------------------------------------*/
12
13
14(function( $ ) {
15	
16	// global variable init
17	var mailform_dt    = $( 'form#mail_form dl dt' );
18	var confirm_window = 1;
19	var rm_token       = '';
20	var scroll_amount  = 70;
21	var required_text  = '必須';
22	var optional_text  = '任意';
23	
24	
25	
26	
27	// function resize
28	function resize() {
29		
30		$( '.loading-layer' ).css({
31			'width': $( window ).width() + 'px',
32			'height': window.innerHeight + 'px'
33		});
34		
35	}
36	
37	
38	
39	
40	// function slice_method
41	function slice_method( el ) {
42		
43		var dt      = el.parents( 'dd' ).prev( 'dt' );
44		var dt_name = dt.html().replace( /<i.*<\/i>/gi, '' );
45		dt_name     = dt_name.replace( /<span.*<\/span>/gi, '' );
46		dt_name     = dt_name.replace( /<br>|<br \/>/gi, '' );
47		return dt_name;
48		
49	}
50	
51	
52	
53	
54	// function error_span
55	function error_span( e, dt, comment, bool ) {
56		
57		if ( bool === true ) {
58			var m = e.parents( 'dd' ).find( 'span.error_blank' ).text( dt + 'が' + comment + 'されていません' );
59		} else {
60			var m = e.parents( 'dd' ).find( 'span.error_blank' ).text( '' );
61		}
62		
63	}
64	
65	
66	
67	
68	// function compare_method
69	function compare_method( s, e ) {
70		
71		if ( s > e ) {
72			return e;
73		} else {
74			return s;
75		}
76		
77	}
78	
79	
80	
81	
82	// function hidden_append
83	function hidden_append( name, value ) {
84		
85		$( '<input />' )
86			.attr({
87				type: 'hidden',
88				id: name,
89				name: name,
90				value: value
91			})
92			.appendTo( $( 'p#form_submit' ) );
93		
94	}
95	
96	
97	
98	
99	// function token_get
100	function token_get() {
101		
102		var form = $( 'form#mail_form' );
103		
104		
105		if ( form.length > 0 ) {
106			$.ajax({
107				type: form.attr( 'method' ),
108				url: form.attr( 'action' ),
109				cache: false,
110				dataType: 'text',
111				data: 'token_get=true&javascript_action=true',
112				
113				success: function( res ) {
114					var response = res.split( ',' );
115					if ( response[0] === 'token_success' ) {
116						rm_token = response[1];
117						setTimeout(function() {
118							token_get();
119						}, 900000 );
120					} else {
121						window.alert( 'トークンの取得に失敗しました。' );
122					}
123				},
124				
125				error: function( res ) {
126					window.alert( 'Ajax通信が失敗しました。\nページの再読み込みをしてからもう一度お試しください。' );
127				}
128			});
129		}
130		
131	}
132	
133	
134	
135	
136	// function required_check
137	function required_check() {
138		
139		var error        = 0;
140		var scroll_point = $( 'body' ).height();
141		
142		
143		for ( var i = 0; i < mailform_dt.length; i++ ) {
144			if ( mailform_dt.eq(i).next( 'dd' ).find( 'input' ).length && mailform_dt.eq(i).next( 'dd' ).hasClass( 'required' ) ) {
145				
146				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'input' );
147				var dt_name  = slice_method( elements.eq(0) );
148				
149				if ( elements.eq(0).attr( 'type' ) === 'radio' || elements.eq(0).attr( 'type' ) === 'checkbox' ) {
150					
151					var list_error = 0;
152					for ( var j = 0; j < elements.length; j++ ) {
153						if ( elements.eq(j).prop( 'checked' ) === false ) {
154							list_error++;
155						}
156					}
157					
158					if ( list_error === elements.length ) {
159						error_span( elements.eq(0), dt_name, '選択', true );
160						error++;
161						scroll_point = compare_method( scroll_point, elements.eq(0).offset().top );
162					} else {
163						error_span( elements.eq(0), dt_name, '', false );
164					}
165					
166				} else {
167					
168					var list_error = 0;
169					for ( var j = 0; j < elements.length; j++ ) {
170						if ( elements.eq(j).val() === '' ) {
171							list_error++;
172						}
173					}
174					
175					if ( list_error !== 0 ) {
176						error_span( elements.eq(0), dt_name, '入力', true );
177						error++;
178						scroll_point = compare_method( scroll_point, elements.eq(0).offset().top );
179					} else {
180						error_span( elements.eq(0), dt_name, '', false );
181					}
182					
183				}
184			}
185			
186			
187			if ( mailform_dt.eq(i).next( 'dd' ).find( 'select' ).length && mailform_dt.eq(i).next( 'dd' ).hasClass( 'required' ) ) {
188				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'select' );
189				var dt_name  = slice_method( elements.eq(0) );
190				
191				var list_error = 0;
192				for ( var j = 0; j < elements.length; j++ ) {
193					if ( elements.eq(j).val() === '' ) {
194						list_error++;
195					}
196				}
197				
198				if ( list_error !== 0 ) {
199					error_span( elements.eq(0), dt_name, '選択', true );
200					error++;
201					scroll_point = compare_method( scroll_point, elements.eq(0).offset().top );
202				} else {
203					error_span( elements.eq(0), dt_name, '', false );
204				}
205			}
206			
207			
208			if ( mailform_dt.eq(i).next( 'dd' ).find( 'textarea' ).length && mailform_dt.eq(i).next( 'dd' ).hasClass( 'required' ) ) {
209				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'textarea' );
210				var dt_name  = slice_method( elements.eq(0) );
211				if ( elements.eq(0).val() === '' ) {
212					error_span( elements.eq(0), dt_name, '入力', true );
213					error++;
214					scroll_point = compare_method( scroll_point, elements.eq(0).offset().top );
215				} else {
216					error_span( elements.eq(0), dt_name, '', false );
217				}
218			}
219			
220			
221			if ( mailform_dt.eq(i).next( 'dd' ).find( 'input' ).length && mailform_dt.eq(i).next( 'dd' ).find( 'input' ).eq(0).attr( 'type' ) === 'email' ) {
222				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'input' );
223				var dt_name  = slice_method( elements.eq(0) );
224				if ( elements.eq(0).val() !== '' && ! ( elements.eq(0).val().match(/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/) ) ) {
225					elements.eq(0).parents( 'dd' ).find( 'span.error_format' ).text( '正しいメールアドレスの書式ではありません。' );
226					error++;
227					scroll_point = compare_method( scroll_point, elements.eq(0).offset().top );
228				} else {
229					elements.eq(0).parents( 'dd' ).find( 'span.error_format' ).text( '' );
230				}
231			}
232		}
233		
234		
235		if ( $( 'input[name="mail_address_confirm"]' ).length && $( 'input[name="mail_address"]' ).length ) {
236			var element   = $( 'input[name="mail_address_confirm"]' );
237			var element_2 = $( 'input[name="mail_address"]' );
238			var dt_name   = slice_method( element );
239			
240			if ( element.val() !== '' && element.val() !== element_2.val() ) {
241				element.parents( 'dd' ).find( 'span.error_match' ).text( 'メールアドレスが一致しません。' );
242				error++;
243				scroll_point = compare_method( scroll_point, element.offset().top );
244			} else {
245				element.parents( 'dd' ).find( 'span.error_match' ).text( '' );
246			}
247		}
248		
249		
250		
251		
252		if ( error === 0 ) {
253			
254			if ( confirm_window === 1 ) {
255				if ( window.confirm( '送信してもよろしいですか?' ) ) {
256					send_setup();
257					order_set();
258					send_method();
259				}
260			}
261			
262		} else {
263			$( 'html, body' ).animate({
264				scrollTop: scroll_point - scroll_amount
265			}, 500 );
266		}
267		
268	}
269	
270	
271	
272	
273	// function send_setup
274	function send_setup() {
275		
276		hidden_append( 'javascript_action', true );
277		hidden_append( 'token', rm_token );
278		
279		var now_url = encodeURI( document.URL );
280		hidden_append( 'now_url', now_url );
281		
282		var before_url = encodeURI( document.referrer );
283		hidden_append( 'before_url', before_url );
284		
285	}
286	
287	
288	
289	
290	// function order_set
291	function order_set() {
292		
293		var order_number = 0;
294		for ( var i = 0; i < mailform_dt.length; i++ ) {
295			
296			if ( mailform_dt.eq(i).next( 'dd' ).find( 'input' ).length ) {
297				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'input' );
298				var dt_name  = slice_method( elements.eq(0) );
299				
300				if ( elements.eq(0).attr( 'type' ) === 'radio' || elements.eq(0).attr( 'type' ) === 'checkbox' ) {
301					
302					var attr_name = elements.eq(0).attr( 'name' ).replace( /\[|\]/g, '' );
303					var attr_type = elements.eq(0).attr( 'type' );
304					order_number++;
305					hidden_append( 'order_' + order_number, attr_type + ',' + attr_name + ',false,' + dt_name );
306					
307				} else {
308					
309					for ( var j = 0; j < elements.length; j++ ) {
310						var attr_name = elements.eq(j).attr( 'name' );
311						var attr_type = elements.eq(j).attr( 'type' );
312						if ( j === 0 ) {
313							var connect = 'false';
314						} else {
315							var connect = 'true';
316						}
317						order_number++;
318						hidden_append( 'order_' + order_number, attr_type + ',' + attr_name + ',' + connect + ',' + dt_name );
319					}
320					
321				}
322			}
323			
324			
325			if ( mailform_dt.eq(i).next( 'dd' ).find( 'select' ).length ) {
326				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'select' );
327				var dt_name  = slice_method( elements.eq(0) );
328				
329				for ( var j = 0; j < elements.length; j++ ) {
330					var attr_name = elements.eq(j).attr( 'name' );
331					var attr_type = 'select';
332					if ( j === 0 ) {
333						var connect = 'false';
334					} else {
335						var connect = 'true';
336					}
337					order_number++;
338					hidden_append( 'order_' + order_number, attr_type + ',' + attr_name + ',' + connect + ',' + dt_name );
339				}
340			}
341			
342			
343			if ( mailform_dt.eq(i).next( 'dd' ).find( 'textarea' ).length ) {
344				var elements = mailform_dt.eq(i).next( 'dd' ).find( 'textarea' );
345				var dt_name  = slice_method( elements.eq(0) );
346				var attr_name = elements.eq(0).attr( 'name' );
347				var attr_type = 'textarea';
348				order_number++;
349				hidden_append( 'order_' + order_number, attr_type + ',' + attr_name + ',false,' + dt_name );
350			}
351			
352		}
353		
354		
355		hidden_append( 'order_count', order_number );
356		
357	}
358	
359	
360	
361	
362	// function send_method
363	function send_method() {
364		
365		$( '<div>' )
366			.addClass( 'loading-layer' )
367			.appendTo( 'body' )
368			.append( '<span class="loading"></span>' );
369		
370		setTimeout(function() {
371			
372			var form_data = new FormData( $( 'form#mail_form' ).get(0) );
373			
374			$.ajax({
375				type: $( 'form#mail_form' ).attr( 'method' ),
376				url: $( 'form#mail_form' ).attr( 'action' ),
377				cache: false,
378				dataType: 'html',
379				data: form_data,
380				contentType: false,
381				processData: false,
382				
383				success: function( res ) {
384					$( 'div.loading-layer, span.loading' ).remove();
385					var response = res.split( ',' );
386					if ( response[0] === 'send_success' ) {
387						window.location.href = response[1];
388					} else {
389						$( 'input#form_submit_button' ).nextAll( 'input' ).remove();
390						response[1] = response[1].replace( /<br>|<br \/>/gi, "\n" );
391						window.alert( response[1] );
392						ios_bugfix();
393					}
394				},
395				
396				error: function( res ) {
397					$( 'div.loading-layer, span.loading' ).remove();
398					$( 'input#form_submit_button' ).nextAll( 'input' ).remove();
399					window.alert( '通信に失敗しました。\nページの再読み込みをしてからもう一度お試しください。' );
400				}
401			});
402			
403		}, 1000 );
404		
405	}
406	
407	
408	
409	
410	// function ios_bugfix
411	function ios_bugfix() {
412		
413	}
414	
415	
416	
417	
418	// page setting
419	for ( var i = 0; i < mailform_dt.length; i++ ) {
420		if ( mailform_dt.eq(i).find( 'i' ).length ) {
421			if ( mailform_dt.eq(i).next( 'dd' ).hasClass( 'required' ) ) {
422				$( '<span/>' )
423					.text( '必須' )
424					.addClass( 'required' )
425					.prependTo( mailform_dt.eq(i).find( 'i' ) );
426			} else {
427				$( '<span/>' )
428					.text( '任意' )
429					.addClass( 'optional' )
430					.prependTo( mailform_dt.eq(i).find( 'i' ) );
431			}
432		}
433		
434		$( '<span/>' )
435			.addClass( 'error_blank' )
436			.appendTo( mailform_dt.eq(i).next( 'dd' ) );
437		
438		if ( mailform_dt.eq(i).next( 'dd' ).find( 'input' ).length && mailform_dt.eq(i).next( 'dd' ).find( 'input' ).eq(0).attr( 'type' ) === 'email' ) {
439			$( '<span/>' )
440				.addClass( 'error_format' )
441				.appendTo( mailform_dt.eq(i).next( 'dd' ) );
442		}
443	}
444	
445	
446	if ( $( 'input[name="mail_address_confirm"]' ).length ) {
447		$( '<span/>' )
448			.addClass( 'error_match' )
449			.appendTo( $( 'input[name="mail_address_confirm"]' ).parents( 'dd' ) );
450	}
451	
452	
453	$( 'form#mail_form input' ).on( 'keydown', function( e ) {
454		if ( ( e.which && e.which === 13 ) || ( e.keyCode && e.keyCode === 13 ) ) {
455			return false;
456		} else {
457			return true;
458		}
459	});
460	
461	
462	$( window ).on( 'resize', resize );
463	
464	
465	token_get();
466	
467	
468	$( 'input#form_submit_button' ).on( 'click', required_check );
469	
470})( 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.