|
|

25.03.2015, 14:41
|
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
|
Что за ФИГНЯ?! У этого языка программирования логика вообще есть?!
<div id="id1" onclick="Function1()">Click on me</div>
<script>
var id1 = document.getElementById("id1");
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');
alert(id1.outerHTML);
function Function1(){
alert('Function1 is executed!');
}
function Function2(){
alert('Function2 is executed!');
}
</script>
Нажмите на "Посмотреть". Кликните на "ОК" при алерте. Потом кликните на "Click on me".
ЭТО ВООБЩЕ ЧТО ТАКОЕ?
Последний раз редактировалось jaroslav.tavgen, 25.03.2015 в 14:44.
|
|

25.03.2015, 14:43
|
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
|
jaroslav.tavgen,
и что не устраивает то?) Все же логично)
Вы в 4-й строке перезаписали элемент, а ссылка осталась на старый.
Последний раз редактировалось tsigel, 25.03.2015 в 14:48.
|
|

25.03.2015, 14:49
|
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
<div id="id1" onclick="Function1()">Click on me</div>
<script>
var id1 = document.getElementById("id1");
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');
alert(id1.outerHTML);
alert(document.getElementById("id1").outerHTML);
function Function1(){
alert('Function1 is executed!');
}
function Function2(){
alert('Function2 is executed!');
}
</script>
|
|

25.03.2015, 14:51
|
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
|
tsigel,
У переменной A значение B.
Я сказал интерпретатору: "изменить значение B на значение C".
Затем я говорю интерпретатору: "Покажи мне значение переменной A".
Интерпретатор отвечает: "Значение переменной A ни хрена не поменялось - как было B, так и осталось".
Однако когда я прошу его выполнить действие, то он выполняет действие C!!!
Где логика?
A = B;
A = C;
WriteContentsOf(A) // Пишет: B
DoAction(A) // Делает действие C
|
|

25.03.2015, 14:53
|
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
|
tsigel,
По поводу Вашего кода : я эту разницу тоже увидел. Но какая логика скрывается за этим?
|
|

25.03.2015, 14:54
|
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
|
jaroslav.tavgen,
Нененене, Девид Блейн! Все не так)
Вы сказали браузеру: Сделай мне элемент по клику на который отработает "ф1" и сохрани этот элемент в переменную "А". А теперь удали этот элемент (а переменная осталась) и замени его на элемент по клику на который отработает "ф2".
Теперь покажи мне переменную "А" (он чесно показывает по тому что там осталась ссылка на удаленный элемент)
Последний раз редактировалось tsigel, 25.03.2015 в 14:57.
|
|

25.03.2015, 15:06
|
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
tsigel,если честно, кое-что непонятно.
|
Сообщение от tsigel
|
|
Вы сказали браузеру: Сделай мне элемент по клику на который отработает "ф1" и сохрани этот элемент в переменную "А". А теперь удали этот элемент (а переменная осталась)
|
А почему переменная осталась?
Ведь вначале он должен удалить элемент, создать новый элемент, И ЗАТЕМ ПОСЛЕ ЭТОГО приравнять полученный результат к переменной A (id1.outerHTML = ...). Хоть по ссылке хоть по значению.
|
|

25.03.2015, 15:11
|
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
|
jaroslav.tavgen,
Браузер должен только спецификации, а поведение кторого вы от него хотите там не описано.
Может быть вы хотите потом добавить её обратно,если браузер будет чистить переменные на элементы которые он удалил, это сильно свяжет руки программистам. Вы должны сами следить за своими переменными. К тому же вы просто неправильно используете АПИ, если бы вы поменяли атрибут методом setAttribute то outerHTML показал бы вам то что вы хотите и не было бы никаких "удаленных" элементов.
|
|

25.03.2015, 15:14
|
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
|
Сообщение от jaroslav.tavgen
|
|
Ведь вначале он должен удалить элемент, создать новый элемент, И ЗАТЕМ ПОСЛЕ ЭТОГО приравнять полученный результат к переменной A (id1.outerHTML = ...). Хоть по ссылке хоть по значению.
|
Что-то я не увидел у вас после строки 4 что-то похожее на "id1 = ...";
Только оператор "=" может сказать что переменную надо заменить. И это ЛОГИЧНО.
|
|

25.03.2015, 15:16
|
|
Кандидат Javascript-наук
|
|
Регистрация: 18.09.2014
Сообщений: 128
|
|
Сообщение от tsigel
|
Что-то я не увидел у вас после строки 4 что-то похожее на "id1 = ...";
Только оператор "=" может сказать что переменную надо заменить. И это ЛОГИЧНО.
|
Почему "после"? "В" строке 4!
|
|
|
|