07.11.2013, 17:38
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от Faab
|
Когда кнопки добавились, мне надо что бы при нажатии на одну из этих кнопок, я выделял ео родителя. Но как?
|
Зачем это делать, когда кнопки добавились, если изначально в цикле фигурирует родитель? Сразу и делайте с ним то, что нужно.
В JQ событие вешается тоже не на коллекцию, а на элементы этой коллекции. Так же можно и в ванили делать - цикл по коллекции и parentNode, если сильно нужно.
|
|
07.11.2013, 18:12
|
Профессор
|
|
Регистрация: 16.04.2012
Сообщений: 310
|
|
function customFunction(eSubButton1){
eSubButton1.parentNode.getElementsByTagName('img')[0].classList.toggle('disNone');
};
function createButton(sId){
eSubButton1 = document.createElement('input');
eSubButton1.id = sId;
eSubButton1.type = "button";
eSubButton1.value = "Behind";
eSubButton1.classList.add("ret");
eSubButton1.onclick = function(){
customFunction(eSubButton1);
};
return eSubButton1;
};
Вот так я показываю/скрываю только последнйи элемент родителя. И не вижу как сделать для каждого: что тут брать в цикл? Я вообще в правильном направлении иду?
<div class="toggle">
<img class="screenshot" width="310" height="307" src="../images/clip_image002.gif" alt="schermafdruk">
</div>
Каждая кнопка в скрипте становиться следующим потомком div.toggle (в скрипте не показано)
|
|
07.11.2013, 18:26
|
Профессор
|
|
Регистрация: 16.04.2012
Сообщений: 310
|
|
function createButton(sId){
eSubButton1 = document.createElement('input');
eSubButton1.id = sId;
eSubButton1.type = "button";
eSubButton1.value = "Behind";
eSubButton1.classList.add("ret");
eSubButton1.onclick = function(){
document.getElementById(sId).parentNode.getElementsByTagName('img')[0].classList.toggle('disNone');
};
return eSubButton1;
};
Это решение с id: сам назначил, сам использовал. А без id как решить эт задачу?
|
|
07.11.2013, 19:13
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Faab,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css" media="screen">
.disNone {
display: none;
}
</style>
<script>
window.onload = function(){
function createButton(){
var eSubButton1;
eSubButton1 = document.createElement('input');
eSubButton1.type = "button";
eSubButton1.value = "Behind";
return eSubButton1;
};
var eArticle, eImages, eImage, sClassList, eSubButton;
var eMainButton = document.getElementById('hoofdknop');
var eDivTootgle = document.querySelectorAll('.toggle');
for(i=0; i<eDivTootgle.length; i++){
eSubButton = createButton();
eDivTootgle[i].appendChild(eSubButton);
eSubButton.onclick = (function ()
{
var div = eDivTootgle[i], n = 0;
return function(){
n ^= 1
div.style.backgroundColor = n ? '#FF0000' : ''
}
})()
};
};
</script>
</head>
<body>
<button id="hoofdknop">Alle schermen verbergen</button>
<dd>de Wizard Site definition verschijnt, je beantwoordt een aantal vragen
<div class="toggle"><img class="screenshot" width="238" height="222" src="../images/clip_image014.gif" alt="schermafdruk"> </div>
</dd>
<dt> “Hoe wil u de website noemen?” </dt>
<dd>vul in <i> George’s site</i>
<div class="toggle"><img class="screenshot" width="310" height="307" src="../images/clip_image002.gif" alt="schermafdruk"> </div>
</dd>
</body>
</html>
Последний раз редактировалось рони, 09.11.2013 в 19:15.
|
|
07.11.2013, 22:08
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от BETEPAH
|
Зачем это делать, когда кнопки добавились, если изначально в цикле фигурирует родитель? Сразу и делайте с ним то, что нужно.
|
<div id="ein" class="toggle"></div>
<div id="zwei" class="toggle"></div>
<div id="drei" class="toggle"></div>
<script>
function createButton(){
var eSubButton1;
eSubButton1 = document.createElement('input');
eSubButton1.type = "button";
eSubButton1.value = "Behind";
return eSubButton1;
};
var eArticle, eImages, eImage, sClassList, eSubButton;
var eDivTootgle = document.querySelectorAll('.toggle'); // toggle
for(i=0; i<eDivTootgle.length; i++){
eSubButton = createButton();
eSubButton.onclick = function(i){
return function() {
alert(eDivTootgle[i].id);// показать id родителя
}
}(i);
eDivTootgle[i].appendChild(eSubButton);
};
</script>
|
|
07.11.2013, 23:25
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
еще один вариант
<div id="container">
<div class="toggle"></div>
<div class="toggle"></div>
<div class="toggle"></div>
</div>
<script>
window.onload = function () {
var container = document.getElementById('container'),
eDivTootgle = container.querySelectorAll('.toggle'),
elLength = eDivTootgle.length,
i = 0,
color;
container.onclick = function (event) {
event = event || window.event;
var e = event.target || event.srcElement;
while (e != this) {
if (e.tagName == 'INPUT') {
color = e.parentNode.style.background;
e.parentNode.style.background = color ? '' : 'red';
break;
}
e = e.parentNode;
}
};
for (; i < elLength; i++) {
eDivTootgle[i].insertAdjacentHTML('afterbegin', '<input type="button" value="Behind"/>');
};
};
</script>
Последний раз редактировалось Vlasenko Fedor, 08.11.2013 в 01:45.
|
|
09.11.2013, 13:41
|
Профессор
|
|
Регистрация: 16.04.2012
Сообщений: 310
|
|
В разделе ЧаВО нашёл статью про замыкающие функции closure. Прочитав её, я понял почему срабатывал только последний объект.
И теперь форма function(i){...}(i); выглядет не так уж загадочно. Но вопросы остались.
Сообщение от BETEPAH
|
for(i=0; i<eDivTootgle.length; i++){
eSubButton = createButton();
eSubButton.onclick = function(i){
return function() {
alert(eDivTootgle[i].id);// показать id родителя
}
}(i);
eDivTootgle[i].appendChild(eSubButton);
};
|
С примером Ветерана вроде всё понятно. Но вот следущее:
Сообщение от рони
|
eSubButton.onclick = (function (a)
{
var div = eDivTootgle[i], n = 0;
return function(){
n ^= 1
div.style.backgroundColor = n ? '#FF0000' : ''
}
})()
|
С рони я уже немного потерялся. Откуда аргумент a?
Что за форма:
eSubButton.onclick = (function (a){...})()
Я уже наверное должен знать такое, но не знаю: что значит
n ^= 1
Сообщение от Poznakomlus
|
container.onclick = function (event) {
event = event || window.event;
var e = event.target || event.srcElement;
while (e != this) {
if (e.tagName == 'INPUT') {
color = e.parentNode.style.background;
e.parentNode.style.background = color ? '' : 'red';
break;
}
e = e.parentNode;
}
};
for (; i < elLength; i++) {
eDivTootgle[i].insertAdjacentHTML('afterbegin', '<input type="button" value="Behind"/>');
};
|
Ваш пример оставил пока на десерт.
|
|
09.11.2013, 16:14
|
|
Профессор
|
|
Регистрация: 23.06.2011
Сообщений: 1,165
|
|
Сообщение от Faab
|
Я уже наверное должен знать такое, но не знаю: что значит
n ^= 1
|
это XOR. Часто используется как двухпозиционный тумблер.
0 xor 1 = 1
1 xor 1 = 0
Если переводить в if, то:
if(n == 1) n = 0;
else if(n == 0) n = 1;
var n = 0;
n ^= 1
alert(n);
n ^= 1
alert(n);
n ^= 1
alert(n);
n ^= 1
alert(n);
|
|
09.11.2013, 19:16
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от Faab
|
С рони я уже немного потерялся. Откуда аргумент a?
|
убрал
|
|
|
|