я кстати тоже не изучал, но ваш код tolikman, похож на логическую шизофрению, это не сарказм или усмешка, скорее удивление увиденным :blink:
|
Моя шизофрения выглядет сечас вот так:
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 я мало пользую. |
Цитата:
|
А мне нравится такая структура кода)
|
Стильненько, ага.
|
Kolyaj, во-во))
|
Понятно... Если его придется изменять, то боюсь это будет нечто совсем другое.
У меня вылезла новая проблема:
function SetEvents(obj){
divs=document.body.getElementsByTagName('div');
for(var i=0; i<divs.length;i++){
if(divs[i].tagName=='DIV'){
if(divs[i].getAttribute('class')=='links'){
ahrefs=divs[i].getElementsByTagName('a');
ahrefs[ahrefs.length-1].onclick=showauth;
}
}
}
}
function showauth(){
uauth=document.createElement('div');
uauth.setAttribute('class','ajaxauth');
document.body.insertBefore(uauth,document.body.firstChild);
uauth.innerHTML='<div class="contnet"><p>Авторизация пользователя:</p><form action="http://ugrasochi.ru/index.php?ajaxreq" method="post"><input type="hidden" name="authorization" value="1"><table><tr><td align="right" width="35%">Имя пользователя:</td><td width="30%"><input name="accusername" style="width:100%;"></td></tr><tr><td align="right">Пароль:</td><td><input name="accuserpass" style="width:100%;" type="password"></td></tr><tr><td colspan="2"><input type="checkbox" name="accuserrem" id="rememberuser" style="margin:0 5px;"><label for="rememberuser">Запомнить на две недели</label></td></tr><tr><td><button type="button" style="width:100%;display:block;">Отмена</button></td><td><button type="button" style="width:100%;display:block;">Авторизироваться</button></td></tr></table></form></div>';
uauth.getElementsByTagName('button')[0].onclick=function(){uauth.parentNode.removeChild(uauth);}
uauth.getElementsByTagName('button')[1].onclick=function(){
var req=getXmlHttp();
if(uauth.firstChild.lastChild.tagName=='P'){uauth.firstChild.removeChild(uauth.firstChild.lastChild);}
req.onreadystatechange=function(){
if(req.readyState==4){
alert('<'+req.responseText+'>');
if(req.responseText!='ERROR'){
var msg=document.createElement('p');
msg.innerHTML='Авторизация прошла успешно, происходит обновление страницы.';
msg.style.color='#2DB253';
uauth.firstChild.appendChild(msg);
setTimeout(function(){window.location.reload();},1000);
}else{
var msg=document.createElement('p');
msg.innerHTML='Ошибка авторизации, возможно вы ввели неправильные лигин и/ил пароль.';
msg.style.color='#e44';
uauth.firstChild.appendChild(msg);
var inputs=uauth.getElementsByTagName('input');
inputs[1].setAttribute('value','');
inputs[2].setAttribute('value','');
}
}
}
var inputs=uauth.getElementsByTagName('input');
var params='authorization=1&accusername='+encodeURIComponent(inputs[1].getAttribute('value'))+'&accuserpass='+encodeURIComponent(inputs[2].getAttribute('value'))+'&accuserrem='+encodeURIComponent(inputs[3].getAttribute('value'));
alert(inputs[1].getAttribute('value'));
req.open('POST','http://*/index.php?ajaxreq',true);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.send(params);
}
return false;
}
в FF alert(inputs[1].getAttribute('value')); (стр.59) возвращает NULL(но tagName==input и проч.), даже если в input еать текст!!! как быть? |
inputs[1].getAttribute('value') вернёт тебе значение атрибута, или проще значение по умолчанию, а если атрибут отсутствует в <input name="accusername" style="width:100%;"> то null
если нужно узнать/установить текущее значение используй inputs[1].value |
| Часовой пояс GMT +3, время: 14:38. |