Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что за ФИГНЯ?! У этого языка программирования логика вообще есть?! (https://javascript.ru/forum/misc/54626-chto-za-fignya-u-ehtogo-yazyka-programmirovaniya-logika-voobshhe-est.html)

jaroslav.tavgen 25.03.2015 14:41

Что за ФИГНЯ?! У этого языка программирования логика вообще есть?!
 
<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".

ЭТО ВООБЩЕ ЧТО ТАКОЕ?

tsigel 25.03.2015 14:43

jaroslav.tavgen,
и что не устраивает то?) Все же логично)

Вы в 4-й строке перезаписали элемент, а ссылка осталась на старый.

tsigel 25.03.2015 14:49

<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>

jaroslav.tavgen 25.03.2015 14:51

tsigel,

У переменной A значение B.

Я сказал интерпретатору: "изменить значение B на значение C".
Затем я говорю интерпретатору: "Покажи мне значение переменной A".
Интерпретатор отвечает: "Значение переменной A ни хрена не поменялось - как было B, так и осталось".

Однако когда я прошу его выполнить действие, то он выполняет действие C!!!

Где логика?

A = B;
A = C;
WriteContentsOf(A) // Пишет: B
DoAction(A) // Делает действие C

jaroslav.tavgen 25.03.2015 14:53

tsigel,
По поводу Вашего кода : я эту разницу тоже увидел. Но какая логика скрывается за этим?

tsigel 25.03.2015 14:54

jaroslav.tavgen,
Нененене, Девид Блейн! Все не так)

Вы сказали браузеру: Сделай мне элемент по клику на который отработает "ф1" и сохрани этот элемент в переменную "А". А теперь удали этот элемент (а переменная осталась) и замени его на элемент по клику на который отработает "ф2".

Теперь покажи мне переменную "А" (он чесно показывает по тому что там осталась ссылка на удаленный элемент)

jaroslav.tavgen 25.03.2015 15:06

tsigel,если честно, кое-что непонятно.

Цитата:

Сообщение от tsigel
Вы сказали браузеру: Сделай мне элемент по клику на который отработает "ф1" и сохрани этот элемент в переменную "А". А теперь удали этот элемент (а переменная осталась)

А почему переменная осталась?

Ведь вначале он должен удалить элемент, создать новый элемент, И ЗАТЕМ ПОСЛЕ ЭТОГО приравнять полученный результат к переменной A (id1.outerHTML = ...). Хоть по ссылке хоть по значению.

tsigel 25.03.2015 15:11

jaroslav.tavgen,
Браузер должен только спецификации, а поведение кторого вы от него хотите там не описано.

Может быть вы хотите потом добавить её обратно,если браузер будет чистить переменные на элементы которые он удалил, это сильно свяжет руки программистам. Вы должны сами следить за своими переменными. К тому же вы просто неправильно используете АПИ, если бы вы поменяли атрибут методом setAttribute то outerHTML показал бы вам то что вы хотите и не было бы никаких "удаленных" элементов.

tsigel 25.03.2015 15:14

Цитата:

Сообщение от jaroslav.tavgen
Ведь вначале он должен удалить элемент, создать новый элемент, И ЗАТЕМ ПОСЛЕ ЭТОГО приравнять полученный результат к переменной A (id1.outerHTML = ...). Хоть по ссылке хоть по значению.

Что-то я не увидел у вас после строки 4 что-то похожее на "id1 = ...";
Только оператор "=" может сказать что переменную надо заменить. И это ЛОГИЧНО.

jaroslav.tavgen 25.03.2015 15:16

Цитата:

Сообщение от tsigel (Сообщение 363031)
Что-то я не увидел у вас после строки 4 что-то похожее на "id1 = ...";
Только оператор "=" может сказать что переменную надо заменить. И это ЛОГИЧНО.

Почему "после"? "В" строке 4!


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