PageSourceSearch

https://fueki-souzoukan.or.jp/js/mailform-js.php

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

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.