Показать сообщение отдельно
  #12 (permalink)  
Старый 02.08.2010, 12:56
Интересующийся
Отправить личное сообщение для tolikman Посмотреть профиль Найти все сообщения от tolikman
 
Регистрация: 31.07.2010
Сообщений: 10

Моя шизофрения выглядет сечас вот так:
prevAdmin=null;
function getXmlHttp(){
	var xmlhttp;  
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
} 
function SetEvents(obj){
	var objs=obj.getElementsByTagName('p');
	for(var i=0;i<objs.length;i++){
		if(objs[i].getAttribute('class')=='admin'){
			var links=objs[i].getElementsByTagName('a');
			for(var k=0;k<links.length;k++){
				if(!links[k].nojs){
					jshref=links[k].getAttribute('href')+'&ajaxreq';
					links[k].onclick=function(pobj,thref){
						return function(){
							var req=getXmlHttp();
							if(prevAdmin){
								with(prevAdmin){
									innerHTML='';
									style.display='none';
								}
							}
							req.onreadystatechange=function(){
								if(req.readyState==4){
									pobj.innerHTML=req.responseText;
									var btns=pobj.getElementsByTagName('button');
									for(j=0;j<btns.length;j++){
										if(btns[j].getAttribute('name')=='btncancel'){
											var pnobj=btns[j].parentNode;
											while(pnobj.tagName!='FORM'){pnobj=pnobj.parentNode;}
											pnobj.parentNode.removeChild(pnobj);
											continue;
										}
										if(btns[j].getAttribute('name')=='btncopy'){
											btns[j].onclick=function(tbtn,count){
												return function(){
													var tbut=document.createElement(tbtn.previousSibling.tagName);
													with(tbtn.previousSibling){
														tbut.setAttribute('name',getAttribute('name'));
														tbut.setAttribute('type',getAttribute('type'));
														setAttribute('name',getAttribute('name')+(count++));
													}
													tbtn.parentNode.insertBefore(tbut,tbtn);
												}
											}(btns[j],0)
											continue;
										}
										if(btns[j].getAttribute('type')=='submit'){
											var tbut=document.createElement('button');
											tbut.setAttribute('type','button');
											tbut.innerHTML='Отмена';
											tbut.onclick=function(){
												pobj.innerHTML='';
												pobj.style.display='none';
											}
											btns[j].parentNode.insertBefore(tbut,btns[j]);
											j++;
											continue;
										}
									}
								}
							}
							req.open('GET',thref,true);
							req.send(null);
							prevAdmin=pobj;
							with(pobj){
								innerHTML='<p style="font-weight:bold;"><img src="img/anim/ajaxloader.gif" width="16" height="16" style="margin:0 5px 0 0;">Подождите, идет загрузка...</p>';
								style.display='block';
							}
							return false;
						}
					}(objs[i].nextSibling,jshref)
				}
			}
		}
	}
}

window.onload=function(){SetEvents(document.body);};

Работает хорошо, браузеры пока не жалуются, код опирается на то, что php правильно выдает изначальное содержание, а в итоге полученного мне хватает, и скриптов больше мне не надо пока...
А кстати, почему Вы удивились, мне очень интересно...
Вас удивило много уровней вложенности функций, или много структур, или то что я не разделил внешние функции для простоты - может все это не хороший тон программирования в JS?
Зато, к примеру, переменную pobj видно во всех вложенных функциях, это мне понравилось, ведь меньше приходится явно передавать данных при каждом вызове любой вложенной функции.
Может сказывается то, что я люблую программировать на VB или C++ (но VB я знаю намного лучше), да и JS я мало пользую.
Ответить с цитированием