Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Событие на input radio (https://javascript.ru/forum/dom-window/50282-sobytie-na-input-radio.html)

redwert 19.09.2014 17:58

Событие на input radio
 
Здравствуйте, столкнулся с такой проблемой: при загрузке странице скрипт на input radio вешает событие. Пытаюсь осуществить это событие при загрузке страницы, если этот input radio выделен.
Вот скрипт который вешает событие:
new (Class.create({
	loadingImageUrl: '<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif');?>',
	initialize: function() {
	    this.bind('click', /^s_method.+$/i, this.onShippingChange);
	},
	bind: function(eventType, elementIdRegExp, cb) {
		document.addEventListener(eventType, function (event) {
		var el = event.target
		, found;
		while (el && !(found = el.id.match(elementIdRegExp))) {
			el = el.parentElement;
		}
		if (found) {
			cb.call(this, el, event);
					}
		}.bind(this));
	},

	onShippingChange: function(el, event ) {
		var hideForm = true;
		$$('#checkout-shipping-method-loadaction input[type=radio]').each(function(el){
		    if (el.id.match(/^s_method_novaposhta/) && el.checked) {
			hideForm = false;
			this.showForm(el.parentNode);
		   }
	    }.bind(this));

	    if (hideForm) {
		this.hideForm();
	    }
	},
	showForm: function(formContainer) {
		this.showLoading(formContainer);
		new Ajax.Request('<?php echo $this->getUrl('novaposhta/checkout/form')?>', {
			onSuccess: function(response) {
				this.hideLoading();
				this.updateForm(response.responseText, formContainer);
			}.bind(this)
		});
	},
	hideForm: function () {
		if ($('novaposhta-form')) {
			Element.remove('novaposhta-form');
		}
	},
	updateForm: function(html, formContainer) {
		var currentForm = $('novaposhta-form');
		if (!formContainer && currentForm) {
			formContainer = currentForm.parentNode;
		}
		if (!formContainer) {
			return;
		}
		if (currentForm) {
                       currentForm.parentNode.removeChild(currentForm);
		}
		Element.insert(formContainer, html);
	},
	showLoading: function(formContainer) {
		if (!formContainer) {
			var currentForm = $('novaposhta-form');
			if (currentForm) {
				formContainer = currentForm.parentNode;
			}
		}
		if (!formContainer) {
			return;
		}
		Element.insert(formContainer, '<p id="novaposhta-loading"><img src="'+this.loadingImageUrl+'" alt="" /> <span><?php echo $this->__('Loading, please wait...');?></span></p>');
	},
	hideLoading: function() {
		Element.remove('novaposhta-loading');
	}
}))();

Попытался на основе этого сделать следующим образом:
jQuery(document).ready(function(){
    // тут часть кода в которой определяю выделенный input, ее не пишу, а далее то что должно вызывать событие

     var el= document.getElementById(checked_el);
     var formContainer = el.parentNode;
     Element.insert(formContainer, '<p id="novaposhta-loading"><img src="'+this.loadingImageUrl+'" alt="" /> <span><?php echo $this->__('Loading, please wait...');?></span></p>');
     new Ajax.Request('<?php echo $this->getUrl('novaposhta/checkout/form')?>', {
    onSuccess: function(response) {
        hideLoading();
        updateForm(response.responseText, formContainer);
        }.bind(this)
    });
});

ну и переписал функции так:
var loadingImageUrl = '<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif');?>'	

function updateForm(html, formContainer) {
	var currentForm = $('novaposhta-form');
	if (!formContainer && currentForm) {
	     formContainer = currentForm.parentNode;
	}
	if (!formContainer) {
            return;
	}
	if (currentForm) {
	    currentForm.parentNode.removeChild(currentForm);
	}
	Element.insert(formContainer, html);
}

function showLoading(formContainer) {
	if (!formContainer) {
		var currentForm = $('novaposhta-form');
		if (currentForm) {
			formContainer = currentForm.parentNode;
		}
	}
	if (!formContainer) {
		return;
	}
}

function hideLoading() {
	Element.remove('novaposhta-loading');
}


Вобщем что то у мня не так написано. Помогите разобраться пожалуйста.

kostyanet 19.09.2014 22:42

Цитата:

Сообщение от redwert
Пытаюсь осуществить это событие при загрузке страницы, если этот input radio выделен.

Тут может выбрать только сервер. Значит вы смотрите что сервер выбрал и, если он выбрал включить радио, вы его включаете elem.click() - так по простому делается raise event

redwert 22.09.2014 14:13

Цитата:

Сообщение от kostyanet (Сообщение 331465)
Тут может выбрать только сервер. Значит вы смотрите что сервер выбрал и, если он выбрал включить радио, вы его включаете elem.click() - так по простому делается raise event

Я сначала , так и сделал. Но по нажатию на этот инпут выполняются также другие действия. Вот поэтму мне надо выполнить именно нужные действия по загрузке страницы.

kostyanet 23.09.2014 09:45

Значит проверяйте контекст - кто щелкнул - скрипт или юзер.


Часовой пояс GMT +3, время: 14:15.