Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   при нажатии на <a.. потеряется (https://javascript.ru/forum/misc/29834-pri-nazhatii-na-poteryaetsya.html)

f-mobile 13.07.2012 09:56

при нажатии на <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>

lord2kim 13.07.2012 10:07

Цитата:

Сообщение от f-mobile (Сообщение 188470)
Здравствуйте.Подскажите, пожалуйста
здесь все отлично работает, но сам тега <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>

задача не ясна, что значит "но сам тега <a> id name lastname vozrastпотеряется"
ааа...понял...ну метод write полностью переписывает содержимое страницы, используйте методы DOM или innerHTML какого-нибудь тега (например, span или div)
и что такое reset; в функции fff() ?

f-mobile 13.07.2012 10:28

reset это пи нажатии id или name .. сортируется список и снова показывает. я думал нужна [i]reset[/I
если вам нетрудно напишите как менять write на innerHTML

vadim5june 13.07.2012 11:16

Цитата:

Сообщение от f-mobile (Сообщение 188477)
если вам нетрудно напишите как менять write на innerHTML

document.body.innerHTML+=user[0]+"<br>"+user[1]+"<br>"+user[2];

но лучше с помощью appendChild

oneguy 13.07.2012 11:52

Цитата:

Сообщение от vadim5june
document.body.innerHTML+=user[0]+"<br>"+user[1]+"<br>"+user[2];

Так писать обычно не очень хорошо с точки зрания быстродействия, так как эта инструкция считывает всё содержимое <body> и записывает его снова. Лучше для этого использовать appendChild.

bes 13.07.2012 13:08

И дело не только в этом, в примере ниже обработчик кнопки сработает только один раз (как объяснить этот эффект, сам хотел бы узнать)
<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>

lord2kim 13.07.2012 13:19

Цитата:

Сообщение от bes (Сообщение 188504)
И дело не только в этом, в примере ниже обработчик кнопки сработает только один раз (как объяснить этот эффект, сам хотел бы узнать)
<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>

а так и не нужно делать) для подобных целей придумали div и span)))

vadim5june 13.07.2012 13:25

Цитата:

Сообщение от bes (Сообщение 188504)
И дело не только в этом, в примере ниже обработчик кнопки сработает только один раз (как объяснить этот эффект, сам хотел бы узнать)

Да вобщем то innerHTML+ это зло -можно использовать только в самых простых случаях и если нет событий
строка document.body.innerHTML+='tratata';
выполняется как document.body.innerHTML='tratata'+document.body.in nerHTML;
то есть вся страница (body) формируется снова-а так как справа в document.body.innerHTML события не входят то они теряются
а если бы Вы написали
<button onclick=alert(3)></button>

то сохранилось бы

bes 13.07.2012 13:35

Цитата:

Сообщение от lord2kim
а так и не нужно делать) для подобных целей придумали div и span)))

Хотелось бы понимать, как это работает: скрипт на странице остается, обработчик onclick у body остаётся и работает, обработчик onclick у кнопки остаётся и не работает (но если задать через атрибут onclick, то будет работать)

Цитата:

Сообщение от vadim5june
document.body.innerHTML события не входят то они теряются

как понимать "не входят"

Цитата:

Сообщение от vadim5june
document.body.innerHTML='tratata'+document.body.in nerHTML

'tratata' справа от +

vadim5june 13.07.2012 13:42

Цитата:

Сообщение от bes (Сообщение 188509)
как понимать "не входят"

в innerHTML входит все что видно нам по alert(document.body.innerHTML)
таким образом все обработчики которые мы сделали скриптами там не видны и не войдут в страницу когда мы будем использовать innerHTML+ а войдут только те обработчики которые мы написали на странице
<button onclick=...
----
'tratata' справа от +
да


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