при нажатии на <a.. потеряется
Здравствуйте.Подскажите, пожалуйста
здесь все отлично работает, но сам тега <a> id name lastname vozrastпотеряется <script type="text/javascript"> var user = [[1,'name1', 'lastname1', 'vozrast1'],[2, 'name2', 'lastname2', 'vozrast2'],[3, 'name3', 'lastname3', 'vozrast3']]; function fff(i){ function sName(a, b) { if (a[i] > b[i]) return 1; else if (a[i] < b[i]) return -1; else return 0; }user.sort(sName); document.write(user[0]+"<br>"+user[1]+"<br>"+user[2]); reset; } </script> <a href="#" onClick="fff(0)">id</a> <a href="#" onClick="fff(1)">name</a> <a href="#" onClick="fff(2)">lastname</a> <a href="#" onClick="fff(3)">vozrast</a> |
Цитата:
ааа...понял...ну метод write полностью переписывает содержимое страницы, используйте методы DOM или innerHTML какого-нибудь тега (например, span или div) и что такое reset; в функции fff() ? |
reset это пи нажатии id или name .. сортируется список и снова показывает. я думал нужна [i]reset[/I
если вам нетрудно напишите как менять write на innerHTML |
Цитата:
document.body.innerHTML+=user[0]+"<br>"+user[1]+"<br>"+user[2]; но лучше с помощью appendChild |
Цитата:
|
И дело не только в этом, в примере ниже обработчик кнопки сработает только один раз (как объяснить этот эффект, сам хотел бы узнать)
<body> <button id="button">click</button><br> <script> document.body.onclick = function () { this.innerHTML += 'text<br>' } document.getElementById('button').onclick = function () { alert('click') } </script> </body> |
Цитата:
|
Цитата:
строка document.body.innerHTML+='tratata'; выполняется как document.body.innerHTML='tratata'+document.body.in nerHTML; то есть вся страница (body) формируется снова-а так как справа в document.body.innerHTML события не входят то они теряются а если бы Вы написали <button onclick=alert(3)></button> то сохранилось бы |
Цитата:
Цитата:
Цитата:
|
Цитата:
таким образом все обработчики которые мы сделали скриптами там не видны и не войдут в страницу когда мы будем использовать innerHTML+ а войдут только те обработчики которые мы написали на странице <button onclick=... ---- 'tratata' справа от + да |
Цитата:
<body> <button id="button">click</button><br> <script> document.body.onclick = function () { document.body.innerHTML += 'text<br>'; alert(document.body.innerHTML); } document.getElementById('button').onclick = function () { alert('click') } </script> </body> |
Цитата:
<!DOCTYPE html> <html><head><title></title></head><body> <script type="text/javascript"> var user = [[1,'name1', 'lastname1', 'vozrast1'],[2, 'name2', 'lastname2', 'vozrast2'],[3, 'name3', 'lastname3', 'vozrast3']]; var frag=document.createDocumentFragment(), cns=frag.childNodes; for (var i=0; i<user.length; i++) { frag.appendChild(document.createTextNode("")); frag.appendChild(document.createElement("br")); } function fff(i) { function sName(a, b) { if (a[i] > b[i]) return 1; else if (a[i] < b[i]) return -1; else return 0; } user.sort(sName); for (i=0; i<user.length; i++) cns[2*i].textContent=user[i]; document.getElementById("result").appendChild(frag.cloneNode(true)); } </script> <a href="#" onClick="fff(0)">id</a> <a href="#" onClick="fff(1)">name</a> <a href="#" onClick="fff(2)">lastname</a> <a href="#" onClick="fff(3)">vozrast</a> <div id="result"></div> </body></html> |
Цитата:
когда выполнился первый раз скрипт то у нас появилось два обработчика на элементах body и button эти обработчики не здесь на странице располагаются а записываются во внутренние таблицы интерпретатора javascript когда мы выполняем команду innerHTML+ то элемент body не трогаем так как только внутри меняем а элемент button заменяем на новый но при этом указатель обработчика указывает на старый button(который у нас удалился) и не срабатывает но еще мы перезаписываем снова тот же скрипт-но он не выполняется-поэтому события не перепишутся |
Да, это наверное может объяснить ситуацию: при изменении содержимого body всё, что в тегах <script></script> внутри этого body заново не анализируется.
Решением может стать переназначение обработчиков (ну или как уже сказали не стоит это вообще использовать). <body> <button id="button">click</button><br> <script> document.body.onclick = function () { document.body.innerHTML += 'text<br>'; document.getElementById('button').onclick = function () { alert('click') } } document.getElementById('button').onclick = function () { alert('click') } </script> </body> |
Цитата:
inerrHTML+ лучше не использовать |
Цитата:
|
попробуй так после
<a href="#" onClick="fff(3)">vozrast</a> добавь <div id="d1"></div> и в скрипте document.getElementById('d1').innerHTML=user[0]+"<br>"+user[1]+"<br>"+user[2]; |
пробовал не получается
<div id="d1"> <a href="#" onClick="fff(0)">id</a> <a href="#" onClick="fff(1)">name</a> <a href="#" onClick="fff(2)">lastname</a> <a href="#" onClick="fff(3)">vozrast</a> </div> <script type="text/javascript"> var user = [[1,'name1', 'lastname1', 'vozrast1'],[2, 'name2', 'lastname2', 'vozrast2'],[3, 'name3', 'lastname3', 'vozrast3']]; function fff(i){ function sName(a, b) { if (a[i] > b[i]) return 1; else if (a[i] < b[i]) return -1; else return 0; }user.sort(sName); document.getElementById('d1').innerHTML+=user[0]+"<br>"+user[1]+"br>"+user[2]; reset; } </script> |
Цитата:
<div id="d1"></div> <a href="#" onClick="fff(0)">id</a> |
так и не получилось
|
попробуй вариант onegue
http://javascript.ru/forum/showthrea...889#post188514 |
Цитата:
тут одной скобки не хватает нужно так document.getElementById('d1').innerHTML+=user[0]+"<br>"+user[1]+"<br>"+user[2]; |
Часовой пояс GMT +3, время: 18:24. |