PageSourceSearch

https://www.cpmeiji.com/js/cart.js

js cpmeiji.com collected 2026-10-02 17:33:45 UTC 22,201 bytes, 693 lines download raw bytes

1$(document).ready(function () {
2    // step page
3    var subname = $('#name-page').attr('subname');
4	var active = $('ul.tab-nav .'+subname).addClass('active');
5	var number = active.attr('number');
6	if (subname) {
7		$('ul.tab-nav li a.has-link').addClass('hidden');
8		for(var $i = 1; $i <= number; $i++){
9			if($i == 1){ 
10				$('.header.breadcrumbs p').text('ตรวจสอบสินค้าของท่านก่อนชำระ');
11			}
12			else if($i == 2){ 
13				$('.header.breadcrumbs h1').text('ข้อมูลสำหรับจัดส่ง'); 
14				$('.header.breadcrumbs p').text('ตรวจสอบสถานที่จัดส่งสินค้า');
15			}
16			else if($i == 3){ 	
17				$('.header.breadcrumbs h1').text('ตรวจสอบรายการสินค้าและข้อมูลจัดส่ง'); 			
18				$('.header.breadcrumbs p').text('ตรวจสอบรายละเอียดสินค้า และการจัดส่งก่อนยืนยันคำสั่งซื้อ');
19			}
20			$('ul.tab-nav li[number='+$i+'] a.has-link').removeClass('hidden');
21			$('ul.tab-nav li[number='+$i+'] a.no-link').addClass('hidden');
22		}
23    }
24
25	$(document).on( "change", "input[name='amount[]']", function() {
26		var val = $(this).val();  
27    	if(val < 1 || val > 20){
28			if(val < 1 ){
29				msg = 'กรุณาระบุจำนวนใหม่ จำนวนไม่ถูกต้อง';
30				$(this).val(1);
31
32				bootbox.alert({
33					message: msg, 
34					buttons: { 
35						ok: { 
36							label: '<i class="fa fa-fw fa-refresh"></i> Retry', 
37							className: 'btn-warning'
38						}
39					}
40				});
41			} 
42			//else {
43			// 	msg = 'กรุณาระบุจำนวนใหม่ จำนวนมากเกินไปสูงสุดไม่เกิน 20 ต่อชิ้น';
44			// 	$(this).val(20);
45			// }
46		}
47	});
48	$('.spinner').spinner({
49		min: 1,
50		// max: 20,
51		step: 1,
52		change: spinerOnchange
53	});
54	var activeStatus = true;
55	function spinerOnchange( event, ui, $this ) {
56		activeStatus = false;
57		//console.log('onchange');
58		if($this == null){
59			$this = $(this);
60		}
61		//console.log($this);
62		var id = $this.data('id');
63		var url = base_url+'cart/step1-order/'+id;
64		var data = { '_token': $('form.del-'+id+' input[name=_token]').val() };
65		data.field = 'amount';
66		data.value = $this.val();
67		var callback = function(res){
68			activeStatus = true;
69			if(res.errors){
70				bootbox.alert({
71					message: res.message.content, 
72					buttons: { 
73						ok: { 
74							label: '<i class="fa fa-fw fa-refresh"></i> Retry', 
75							className: 'btn-warning'
76						}
77					}
78				});
79			}else{
80				$('#navbar .profile-cart .badge').text(res.total);
81				$('.total_price').text(res.total_price);
82				$('#text-amount-'+res.id).text(res.message.text_amount);
83				$('#text-price-'+res.id).text(res.message.text_price);
84			}
85		}
86		
87		if(data.value > 0){
88			submitAjax('PUT', url, data, callback);
89		}
90	}
91
92	$( "a.ui-spinner-button" ).click(function() {
93		if(activeStatus==true){
94			//console.log('click spiner');
95			spinerOnchange(null,null,$(this).parent().find('input'));
96		}else{console.log('quickly click');}
97	});
98
99	$("#gotostep2").click(function() {	
100		$prices = parseInt($('.total_price').text());
101		if($prices < 60){
102			bootbox.alert({
103				message: "กรุณาสั่งสินค้าขั้นต่ำ 60 บาทขึ้นไป", 
104				buttons: { 
105					ok: { 
106						label: '<i class="fa fa-fw fa-refresh"></i> Retry', 
107						className: 'btn-warning'
108					}
109				}
110			});
111			return false;
112		}
113	});
114	
115	$(".select-size").change(function(e) {
116		var id = $(this).data('id');
117		var url = base_url+'cart/step1-order/'+id;
118		var data = { '_token': $('form.del-'+id+' input[name=_token]').val() };
119		data.field = 'product';
120		data.value = $(this).val();
121		var callback = function(res){
122			if(res.errors){
123				bootbox.alert({
124					message: res.message.content, 
125					buttons: { 
126						ok: { 
127							label: '<i class="fa fa-fw fa-refresh"></i> Retry', 
128							className: 'btn-warning'
129						}
130					}
131				});
132			}else{
133				location.reload();
134			}
135		}
136		
137		submitAjax('PUT', url, data, callback);
138		
139		return false;
140	});
141	
142	$(".btn-del").click(function(e) {
143		var id = $(this).data('id');
144		var url = base_url+'cart/step1-order/'+id;
145		var data = { '_token': $('form.del-'+id+' input[name=_token]').val() };
146		var callback = function(res){
147				$('#navbar .profile-cart .badge').text(res.total);
148				$('.total_price').text(res.total_price);
149				$('#product-'+res.id).remove();
150				if(! res.result){ $("#next-step").remove(); }
151				bootbox.alert({
152					message: res.message.text, 
153					buttons: { 
154						ok: { 
155							label: 'OK', 
156							className: 'btn-success' 
157						} 
158					} 
159				});
160			}
161		
162		submitAjax('DELETE', url, data, callback);
163		
164		return false;
165	});
166
167	if($('.form-cart-step2').length > 0) {
168		$('form.form-cart-step2 button[type="submit"]').click(function(e){
169			$('.btn-cancel-address').trigger('click');
170			return checkSubmit();
171		});
172		
173		checkSubmit = function()
174		{
175			var submit = true;
176			var $delivery_date = $('.form-cart-step2 [name="delivery_date"]');
177			var $delivery_time = $('.form-cart-step2 [name="delivery_time"]');
178			var $order_address = $('.form-cart-step2 [name="order_address"]:checked');
179
180			if($delivery_date.val() == ""){
181				$delivery_date.parent().parent().removeClass("has-success");
182				$delivery_date.parent().parent().addClass("has-error");
183				$('.error-delivery-date').removeClass('hidden');
184				submit = false;
185			}else{
186				$delivery_date.parent().parent().removeClass("has-error");
187				$delivery_date.parent().parent().addClass("has-success");
188				$('.error-delivery-date').addClass('hidden');
189			}
190			if($delivery_time.val() == ""){
191				$delivery_time.parent().parent().parent().removeClass("has-success");
192				$delivery_time.parent().parent().parent().addClass("has-error");
193				$('.error-delivery-time').removeClass('hidden');
194				submit = false;
195			}else{
196				$delivery_time.parent().parent().parent().removeClass("has-error");
197				$delivery_time.parent().parent().parent().addClass("has-success");
198				$('.error-delivery-time').addClass('hidden');
199			}
200			if($order_address.val() == "" || $order_address.val() == undefined || $order_address.val() == null){
201				$('.error-order-address').parent().removeClass("has-success");
202				$('.error-order-address').parent().addClass("has-error"); 
203				$('.error-order-address').removeClass('hidden');
204				submit = false;
205			}else{
206				$('.error-order-address').parent().removeClass("has-error");
207				$('.error-order-address').parent().addClass("has-success");
208				$('.error-order-address').addClass('hidden');
209			}
210			
211			return submit;
212		}
213	}
214
215	/* =========== add new address  =========== */
216	hiddenBtnAddAddress();
217	function hiddenBtnAddAddress (){
218		var count_address = $('.show-address label').length;
219		if(count_address > 0 ){
220			$('.btn-add-address').addClass('hidden');
221			$('.textWarn').addClass('hidden');
222		} else {
223			$('.btn-add-address').removeClass('hidden');
224			$('.textWarn').removeClass('hidden');
225		}
226	}
227	
228	$(document).on("click", ".btn-add-address", function(){
229		$count_item = $('fieldset[data-id="temp"]').length;
230		$('.new-address').removeClass('hidden');
231		$(this).addClass('hidden');
232		var $fieldset = $('fieldset');
233		$('small',$fieldset).addClass('hidden');
234		$('[name]',$fieldset).removeClass('error-border');
235		$('.has-error',$fieldset).removeClass('has-error');
236		$('#road_name').addClass('hidden');
237		return false;
238	});
239
240	$(document).on("click", ".btn-cancel-address", function(){
241		$('.new-address').addClass('hidden');
242		$('.templete-address').find("input, textarea , select").val("");
243		$('.btn-add-address').removeClass('hidden');
244		hiddenBtnAddAddress();
245		return false;
246	});
247
248	$(document).on("click", ".btn-save-address", function(){
249		var type = "POST";
250		var form = false;
251		var url = base_url;
252		url += 'account/info/address';
253		var val = { '_token': $('input[name=_token]').val() };
254		var msg = "";
255		val.telephone = $("input[name='telephone']").val();
256		val.province_id = $("select[name='province_id']").val();
257		val.district_id = $("select[name='district_id']").val();
258		val.sub_district_id = $("select[name='sub_district_id']").val();
259		val.road_id  = $("select[name='road_id']").val();
260		val.road_name = $("input[name='road_name']").val();
261		val.postcode = $("input[name='postcode']").val();
262		val.house_no = $("input[name='house_no']").val();
263		val.moo = $("input[name='moo']").val();
264		val.village = $("input[name='village']").val();
265		val.soi_name = $("input[name='soi_name']").val();
266		val.landmark = $("textarea[name='landmark']").val();
267
268		var callback = function(res){
269			if(res.message.type == "success"){
270				$('.new-address').addClass('hidden');
271				$('.templete-address').find("input, textarea , select").val("");
272				cloneTempleteAddress(res);
273				hiddenBtnAddAddress();
274			}
275		}
276		
277		if(validateAddress(val)){
278			submitAjax(type, url, val, callback, form);
279		}else{
280			bootbox.alert({
281				message: 'กรุณาตรวจสอบข้อมูล',
282				buttons: {
283					ok: {
284						label: 'Wrong!',
285						className: 'btn-danger'
286					},
287				},
288			});
289		}
290
291		return false;
292	});
293
294	function cloneTempleteAddress(res){
295		var $blog_no = $('.show-address').length + 1;
296		var $new_clone = $(".show-address-template").clone();
297		var $new_blog = $new_clone.appendTo(".show-address-area").removeClass('hidden show-address-template').addClass('show-address').attr('data-address',$blog_no);
298        $fieldset = $('.show-address[data-address="'+$blog_no+'"]');
299		$('input',$fieldset ).attr('value',res.id);
300		$('p',$fieldset ).text(res.address_text);
301		$('.btn-add-address').removeClass('hidden');
302	}
303
304	function validateAddress(data){
305		var submit = true;
306		var $fieldset = $('fieldset');
307		$('small',$fieldset).addClass('hidden');
308		$('[name]',$fieldset).removeClass('error-border');
309		$('.has-error',$fieldset).removeClass('has-error');
310
311		if(data.telephone == "" || ! new RegExp("^[0]{1}[0-9]{8,9}$").test(data.telephone)){
312			$('[name="telephone"]').addClass('error-border');
313			$('[name="telephone"]').next().removeClass('hidden').text('กรุณากรอกเบอร์โทรศัพท์ให้ถูกต้อง');
314			$('[name="telephone"]').parent().parent().addClass('has-error');
315			submit = false;
316		}
317		if (data.postcode == "" || ! new RegExp("^[0-9]{5}$").test(data.postcode)){
318			$('[name="postcode"]').addClass('error-border');
319			$('[name="postcode"]').next().removeClass('hidden').text('กรุณากรอกรหัสไปรษณีย์ให้ถูกต้อง');
320			$('[name="postcode"]').parent().parent().addClass('has-error');
321			submit = false;
322		}
323		if (data.province_id == ""){
324			$('[name="province_id"]').addClass('error-border');
325			$('[name="province_id"]').next().removeClass('hidden').text('กรุณาเลือกจังหวัด');
326			$('[name="province_id"]').parent().parent().addClass('has-error');
327			submit = false;
328		}
329		if (data.district_id == ""){
330			$('.error-district').remove();
331			$('[name="district_id"]').addClass('error-border');
332			$('[name="district_id"]').after('<small class="help-block error-district">กรุณาเลือกอำเภอ </small>');
333			$('[name="district_id"]').parent().parent().addClass('has-error');
334			submit = false;
335		}
336		if (data.sub_district_id == ""){
337			$('.error-sub-district').remove();
338			$('[name="sub_district_id"]').addClass('error-border');
339			$('[name="sub_district_id"]').after('<small class="help-block error-sub-district">กรุณาเลือกตำบล </small>');
340			$('[name="sub_district_id"]').parent().parent().addClass('has-error');
341			submit = false;
342		}
343		if(data.province_id == 1){
344			$('.error-road').remove();
345			if($('[name="road_id"]').hasClass('hidden')){
346				if (data.road_name == ""){
347					$('[name="road_name"]').addClass('error-border');
348					$('[name="road_name"]').after('<small class="help-block error-road">กรุณากรอกถนน (หากไม่มีใส่ -)</small>');
349					$('[name="road_name"]').parent().parent().addClass('has-error');
350					submit = false;
351				}
352			} else {
353				if (data.road_id == "" || data.road_id == undefined || data.road_id == null ){
354					$('[name="road_id"]').addClass('error-border');
355					$('[name="road_id"]').after('<small class="help-block error-road">กรุณาเลือกถนน </small>');
356					$('[name="road_id"]').parent().parent().addClass('has-error');
357					submit = false;
358				}
359				if (data.road_id == "other"){
360					if (data.road_name == "" || data.road_name == undefined || data.road_name == null){
361						$('[name="road_name"]').addClass('error-border');
362						$('[name="road_name"]').after('<small class="help-block error-road">กรุณากรอกถนน (หากไม่มีใส่ -)</small>');
363						$('[name="road_name"]').parent().parent().addClass('has-error');
364						submit = false;
365					}
366				}	
367			}
368		}
369		if (data.house_no == ""){
370			$('[name="house_no"]').addClass('error-border');
371			$('[name="house_no"]').next().removeClass('hidden').text('กรุณากรอกบ้านเลขที่ให้ถูกต้อง');
372			$('[name="house_no"]').parent().parent().addClass('has-error');
373			submit = false;
374		}
375		if(data.province_id != 1){
376			if (data.moo == ""){
377				$('[name="moo"]').addClass('error-border');
378				$('[name="moo"]').next().removeClass('hidden').text('กรุณากรอกหมู่ให้ถูกต้อง (หากไม่มีใส่ -)');
379				$('[name="moo"]').parent().parent().addClass('has-error');
380				submit = false;
381			}
382		}
383		return submit;
384		
385	}
386
387	function checkAreaProvince($province){
388		$fieldset = $('fieldset');
389		$('.road_name',$fieldset).val('');
390		$('.soi_name',$fieldset).val('');
391		if($province == 1){
392			$('.road_id',$fieldset).removeClass('hidden').attr('disabled',false);
393			$('.road_name',$fieldset).addClass('hidden').attr('disabled',true);
394			$('.ForBangkok',$fieldset).addClass('hidden');
395			$('.ForProvincial',$fieldset).removeClass('hidden');
396			
397		} else {
398			$('.road_id',$fieldset).addClass('hidden').attr('disabled',true);
399			$('.road_name',$fieldset).removeClass('hidden').attr('disabled',false);
400			$('.soi_id',$fieldset).addClass('hidden').attr('disabled',true);
401			$('.soi_name',$fieldset).removeClass('hidden').attr('disabled',false);
402			$('.ForBangkok',$fieldset).removeClass('hidden');
403			$('.ForProvincial',$fieldset).addClass('hidden');
404		}
405	}
406
407	$('#road_id').attr('disabled', true);
408	$('#soi_id').attr('disabled', true);
409
410	if($("#road_id").val() != ''){
411		$('#road_id').attr('disabled', false);
412		if($("#road_id").val() == 'other'){
413			$('#road_name').attr('disabled', false);
414			$('#road_name').removeClass('hidden');
415		}
416	}
417
418	if($('#postcode').val() != ''){
419		var postcode = $('#postcode').val();
420	} else {
421		var postcode = '';
422	}
423	disableAddressSelect = function()
424	{
425		$('#province_id').attr('disabled', true);
426		$('#district_id').attr('disabled', true);
427		$('#sub_district_id').attr('disabled', true);
428		$('#road_id').attr('disabled', true);
429		$('#soi_id').attr('disabled', true);
430		
431		$('#road_name').attr('disabled', true);
432		$('#road_name').addClass('hidden');
433		$('#road_name').val('');
434		$('#soi_name').val('');
435
436		if($('#postcode').length > 0) {
437			$('#postcode').val('');
438		}			
439	};
440
441	function showRoadInput(val){
442		if(val){
443			$province_id = val;
444		} 
445
446		if($province_id == 1){
447			$('.road_name').addClass('hidden');
448			$('.road_name').attr('disabled', true);
449			$('#road_id').removeClass('hidden');
450			$('#road_id').attr('disabled', false);
451		} else {
452			$('.road_name').removeClass('hidden');
453			$('.road_name').attr('disabled', false);
454			$('#road_id').addClass('hidden');
455			$('#road_id').attr('disabled', true);
456		}
457	}
458	
459	var $province_id = null;
460	$(document).on( "change", "#province_id", function() {
461		disableAddressSelect();    
462		$val = parseInt($(this).val());
463		$province_id = $val;
464		if($val == 1){
465			$('.forBangkok').removeClass('hidden');
466		} else {
467			$('.forBangkok').addClass('hidden');
468		}
469		showRoadInput($val);
470		checkAreaProvince($val);
471
472		$.ajax({
473			url: base_url + 'admin/user-address/province/' + $val,           
474			dataType: 'json',
475			success: function(res) {
476				if(res.result) {
477					$('#province_id').attr('disabled', false);
478					$('#district_id').attr('disabled', false);
479					$('#sub_district_id').attr('disabled', true);
480					
481					$('#district_id option:eq(0)').prop('selected', true);
482					$('#sub_district_id option:eq(0)').prop('selected', true);
483					$('#road_id option:eq(0)').prop('selected', true);
484
485					$('#district_id').parent().html(res.district);
486					$('#sub_district_id').parent().html(res.sub_district);                    
487					$('#road_id').parent().html(res.road);
488					$('#soi_id').parent().html(res.soi);
489					
490					if($('#postcode').length > 0) {
491						$('#postcode').val('');  
492						postcode = '';  
493					}
494				}
495			},
496			complete: function() {
497				$('#province_id').attr('disabled', false);
498				$('#district_id option:eq(0)').prop('selected', true);
499				$('#sub_district_id option:eq(0)').prop('selected', true);
500				$('#road_id option:eq(0)').prop('selected', true);
501			},
502		});
503	});
504	
505	$(document).on( "change", "#district_id", function() {
506		disableAddressSelect();   
507		showRoadInput();
508		$val = $(this).val();
509		$.ajax({
510			url: base_url + 'admin/user-address/district/' + $val,         
511			dataType: 'json',        
512			success: function(res) {
513				if(res.result) {
514					$('#province_id').attr('disabled', false);
515					$('#district_id').attr('disabled', false);
516					$('#sub_district_id').attr('disabled', false);
517
518					$('#sub_district_id option:eq(0)').prop('selected', true);
519					$('#road_id option:eq(0)').prop('selected', true);
520					
521					$('#sub_district_id').parent().html(res.sub_district);
522					$('#road_id').parent().html(res.road);
523					$('#soi_id').parent().html(res.soi);
524
525					if($('#postcode').length > 0) {
526						$('#postcode').val(''); 
527						postcode = '';
528					}
529				}
530			},
531			complete: function() {
532				$('#province_id').attr('disabled', false);
533				$('#district_id').attr('disabled', false); 
534				$('#sub_district_id option:eq(0)').prop('selected', true);
535				$('#road_id option:eq(0)').prop('selected', true);              
536			},
537		});
538	});
539	
540	var sub_district_success = false;
541	$(document).on( "change", "#sub_district_id", function() {
542		sub_district_success = false;
543		disableAddressSelect(); 
544		showRoadInput();  
545		$val = $(this).val();
546		$.ajax({
547			url: base_url + 'admin/user-address/sub-district/' + $val,          
548			dataType: 'json',        
549			success: function(res) {
550				sub_district_success = true;
551				if(res.result) {                    
552					$('#road_id').parent().html(res.road);
553					$('#soi_id').parent().html(res.soi);
554
555					$('#road_id option:eq(0)').prop('selected', true);
556
557					if($('#postcode').length > 0) {
558						$('#postcode').val(res.postcode); 
559						postcode = res.postcode;
560					}
561				}
562			},
563			complete: function() {
564				$('#province_id').attr('disabled', false);
565				$('#district_id').attr('disabled', false);
566				$('#sub_district_id').attr('disabled', false);
567				$('#road_id option:eq(0)').prop('selected', true);
568				if(!sub_district_success){
569					$('#road_id').attr('disabled', false);
570					$('#road_id').html('<option value="">เลือกถนน</option><option value="other">อื่นๆ</option>');
571				}
572			},            
573		});
574	});
575
576	var road_success = false;
577	$(document).on( "change", "#road_id", function() {
578		disableAddressSelect();
579		showRoadInput();
580		$val = $(this).val();
581		$("#soi_name").val("");
582		
583		if($val == 'other' || $val == ''){
584			if($val == 'other' ){
585				$("#road_name").removeClass("hidden");
586				$('.error-road').remove();
587			}
588			$('#road_name').attr('disabled', false);
589			if($('#postcode').length > 0) {
590				$('#postcode').val(postcode);    
591			}
592		}else{
593			$("#road_name").val("");				
594			$("#road_name").addClass("hidden");
595			$('#road_name').attr('disabled', true);
596		}			
597		$.ajax({
598			url: base_url + 'admin/user-address/road/' + $val,          
599			dataType: 'json',        
600			success: function(res) {
601				road_success = true;
602				if(res.result) {
603					$('#soi_id').parent().html(res.soi);
604					if($('#postcode').length > 0) {
605						$('#postcode').val(postcode);    
606					}
607				}
608			},
609			complete: function() {
610				$('#province_id').attr('disabled', false);
611				$('#district_id').attr('disabled', false);
612				$('#sub_district_id').attr('disabled', false);
613				$('#road_id').attr('disabled', false);
614				if(!road_success){
615					$('#soi_id').html('<option value="">เลือกซอย</option><option value="other">อื่นๆ</option>');
616				}
617				$('#soi_id').attr('disabled', false);
618				$('#soi_id option:eq(0)').prop('selected', true);
619			},            
620		});
621	});
622
623	function submitAjax(type, url, data, callback, form){
624		var ajaxData = {
625			type: type,
626			url: url,
627			data: data,
628			success: function(res) {
629				trace(res);
630				if(res) {
631					if(callback){ 
632						callback(res);
633					}else{
634						bootbox.alert({
635							message: res.message.content, 
636							buttons: { 
637								ok: { 
638									label: 'OK', 
639									className: 'btn-success' 
640								} 
641							} 
642						});
643					}
644				}else{
645					bootbox.alert({
646						message: '<i class="fa fa-fw fa-warning"></i> No response !!!',
647						buttons: {
648							ok: {
649								label: 'OK',
650								className: 'btn-danger'
651							},
652						}
653					});
654				}
655			},                
656		}
657		
658		if(form){
659			var formData = new FormData();
660			formData.append('_method', type); 
661			for (var prop in data) {
662				formData.append(prop, data[prop]);
663			}
664			
665			ajaxData.type = 'post';
666			ajaxData.data = formData;
667			ajaxData.processData = false;
668			ajaxData.contentType = false;
669			ajaxData.enctype = "multipart/form-data";
670		}
671		
672		$.ajax(ajaxData);
673	}
674	
675});
676
677if (!window['console']) {
678	console = {log: function () {}};
679}
680function trace(txt) {
681	//console.log(txt);
682}
683function log()
684{
685	var txt = "";
686	var length = arguments.length;
687
688	for (var i = 0; i < length; i++) {
689		txt += arguments[i] + " ";
690	}
691
692	trace(txt);
693}

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.