Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Ошибка при обращении к созданному элементу (https://javascript.ru/forum/events/45538-oshibka-pri-obrashhenii-k-sozdannomu-ehlementu.html)

Павел Пичужкин 04.03.2014 23:34

Ошибка при обращении к созданному элементу
 
Люди, подскажите! Такая проблема: с помощью приведённого ниже кода генерируется элемент, при клике на который должен сворачиваться элемент с определённым идентификатором, генерируемым после него. Но при клике по первому элементу во всех браузерах кроме хрома выкидывает ошибку [object Object]. Можно ли при генерации элемента повесить на него onClick не с помощью href, а как-нибудь типа yearItemLink.onclick = '...'? Сайт, где используется скрипт: shkolyar.my1.ru.

var yearItemLink = document.createElement('a');
yearItemLink.href = 'javascript:$(\'#year'+(Shkolyar[itemNumber].Year)+'\').slideToggle(\'300\')';
yearItemLink.title = 'Номера газеты за '+(Shkolyar[itemNumber].Year)+' год';
yearItemLink.appendChild(document.createTextNode((Shkolyar[itemNumber].Year)+' год'));
leftmenu.appendChild(yearItemLink);

var yearList = document.createElement('div');
yearList.id = 'year'+(Shkolyar[itemNumber].Year);
if ((Shkolyar[itemNumber].Year) == (Shkolyar[hash].Year)) {
yearList.style.display = 'block';
}
yearList.className = 'yearlist';
leftmenu.appendChild(yearList);

danik.js 05.03.2014 03:08

Цитата:

Сообщение от Павел Пичужкин
ошибку [object Object]

Не слышал про такую ошибку. Скрин можно?
Цитата:

Сообщение от Павел Пичужкин
как-нибудь типа yearItemLink.onclick

Конечно. Даже нужно! Только не строку присваивай, а функцию:
bla.onclick = function() {
    alert('bla bla');
};


Только если у тя jquery подключена, че ты х*ней страдаешь?
var $yearLink = $('<a>', {text: 'year bla bla', title: 'Номера газеты'});
$yearLink.click(function() {alert('bla')});

Павел Пичужкин 05.03.2014 19:58

Написал так, но что-то всё равно не пашет :-E
var yearItemLink = document.createElement('a');
yearItemLink.onclick = function() {
$('#year'+(Shkolyar[itemNumber].Year)).slideToggle('300');
};
yearItemLink.title = 'Номера газеты за '+(Shkolyar[itemNumber].Year)+' год';
yearItemLink.appendChild(document.createTextNode((Shkolyar[itemNumber].Year)+' год'));
leftmenu.appendChild(yearItemLink);

ksa 05.03.2014 21:49

Павел Пичужкин, ты в состоянии сделать полный тестовый пример, а не показывать эти огрызки?

danik.js 06.03.2014 02:48

Мож у тя jquery не подключена?

Павел Пичужкин 06.03.2014 13:51

Так подключена. Если просто тег с событием onclick создать вручную, всё работает. А если генерировать элемент таким способом, то onclick просто не добавляется. Не пойму почему. Если пишу через href, как показывал выше, то работает, но только через хром. Вот весь код. Смысл вот в чём: есть массив; и скрипт должен на основе его содержимого создать и рассортировать по годам элементы массива. Скрипт используется здесь: shkolyar.my1.ru. Единственная проблема в том, что на генерируемые ссылки не удаётся повесить событие, которое будет сворачивать/разворачивать списки.
<div style="float: clear" id="leftmenu"></div>
<div id="paper">

<script type="text/javascript">
Shkolyar = new Array(
{"ID":"0", "Number":"01", "Text":"№1 (10 октября)", "Year":"2007", "Pages":"2"},
{"ID":"1", "Number":"02", "Text":"№2 (11 ноября)", "Year":"2007", "Pages":"4"},
{"ID":"2", "Number":"03", "Text":"№3 (25 декабря)", "Year":"2007", "Pages":"2"},
{"ID":"3", "Number":"04", "Text":"№4 (январь)", "Year":"2008", "Pages":"4"},
{"ID":"4", "Number":"05", "Text":"№5 (февраль)", "Year":"2008", "Pages":"4"},
{"ID":"5", "Number":"SV01", "Text":"СВ №1 (март)", "Year":"2008", "Pages":"2"},
{"ID":"6", "Number":"SV02", "Text":"СВ №2 (апрель)", "Year":"2008", "Pages":"4"},
{"ID":"7", "Number":"06-1", "Text":"№6-1 (октябрь)", "Year":"2008", "Pages":"4"},
{"ID":"8", "Number":"07-1", "Text":"№7-1 (ноябрь)", "Year":"2008", "Pages":"4"},
{"ID":"9", "Number":"08", "Text":"№8 (декабрь)", "Year":"2008", "Pages":"4"},
{"ID":"10", "Number":"09", "Text":"№9 (январь)", "Year":"2009", "Pages":"4"},
{"ID":"11", "Number":"10", "Text":"№10 (февраль)", "Year":"2009", "Pages":"4"},
{"ID":"12", "Number":"11", "Text":"№11 (март)", "Year":"2009", "Pages":"4"},
{"ID":"13", "Number":"12", "Text":"№12 (апрель)", "Year":"2009", "Pages":"4"},
{"ID":"14", "Number":"13", "Text":"№13 (9 мая)", "Year":"2009", "Pages":"4"},
{"ID":"15", "Number":"14", "Text":"№14 (май)", "Year":"2009", "Pages":"4"},
{"ID":"16", "Number":"15", "Text":"№15 (сентябрь)", "Year":"2009", "Pages":"4"},
{"ID":"17", "Number":"16", "Text":"№16 (октябрь)", "Year":"2009", "Pages":"4"},
{"ID":"18", "Number":"17", "Text":"№17 (ноябрь)", "Year":"2009", "Pages":"4"},
{"ID":"19", "Number":"18", "Text":"№18 (декабрь)", "Year":"2009", "Pages":"4"},
{"ID":"20", "Number":"19", "Text":"№19 (январь)", "Year":"2010", "Pages":"4"},
{"ID":"21", "Number":"20", "Text":"№20 (февраль)", "Year":"2010", "Pages":"4"},
{"ID":"22", "Number":"21", "Text":"№21 (март)", "Year":"2010", "Pages":"4"},
{"ID":"23", "Number":"22", "Text":"№22 (апрель)", "Year":"2010", "Pages":"4"},
{"ID":"24", "Number":"23", "Text":"№23 (9 мая)", "Year":"2010", "Pages":"4"},
{"ID":"25", "Number":"24", "Text":"№24 (май)", "Year":"2010", "Pages":"4"},
{"ID":"26", "Number":"27", "Text":"№27 (сентябрь)", "Year":"2010", "Pages":"4"},
{"ID":"27", "Number":"28", "Text":"№28 (октябрь)", "Year":"2010", "Pages":"4"},
{"ID":"28", "Number":"29", "Text":"№29 (ноябрь)", "Year":"2010", "Pages":"4"},
{"ID":"29", "Number":"30", "Text":"№30 (декабрь)", "Year":"2010", "Pages":"4"},
{"ID":"30", "Number":"31", "Text":"№31 (январь)", "Year":"2011", "Pages":"4"},
{"ID":"31", "Number":"32", "Text":"№32 (февр.-март)", "Year":"2011", "Pages":"4"},
{"ID":"32", "Number":"33", "Text":"№33 (апрель)", "Year":"2011", "Pages":"4"},
{"ID":"33", "Number":"34", "Text":"№34 (май)", "Year":"2011", "Pages":"4"},
{"ID":"34", "Number":"35", "Text":"№35 (сентябрь)", "Year":"2011", "Pages":"4"},
{"ID":"35", "Number":"36", "Text":"№36 (октябрь)", "Year":"2011", "Pages":"4"},
{"ID":"36", "Number":"37", "Text":"№37 (ноябрь)", "Year":"2011", "Pages":"4"},
{"ID":"37", "Number":"38", "Text":"№38 (декабрь)", "Year":"2011", "Pages":"4"},
{"ID":"38", "Number":"39", "Text":"№39 (март)", "Year":"2012", "Pages":"4"},
{"ID":"39", "Number":"40", "Text":"№40 (май)", "Year":"2012", "Pages":"4"},
{"ID":"40", "Number":"41", "Text":"№41 (сентябрь)", "Year":"2012", "Pages":"4"},
{"ID":"41", "Number":"42", "Text":"№42 (октябрь)", "Year":"2012", "Pages":"4"},
{"ID":"42", "Number":"43", "Text":"№43 (ноябрь)", "Year":"2012", "Pages":"4"},
{"ID":"43", "Number":"44", "Text":"№44 (январь)", "Year":"2013", "Pages":"4"},
{"ID":"44", "Number":"45", "Text":"№45 (март)", "Year":"2013", "Pages":"4"},
{"ID":"45", "Number":"SV03", "Text":"СВ №3 (апрель)", "Year":"2013", "Pages":"4"},
{"ID":"46", "Number":"46", "Text":"№46 (апрель)", "Year":"2013", "Pages":"4"},
{"ID":"47", "Number":"47", "Text":"№47 (9 мая)", "Year":"2013", "Pages":"4"},
{"ID":"48", "Number":"48", "Text":"№48 (сентябрь)", "Year":"2013", "Pages":"4"},
{"ID":"49", "Number":"49", "Text":"№49 (октябрь)", "Year":"2013", "Pages":"4"},
{"ID":"50", "Number":"50", "Text":"№50 (ноябрь)", "Year":"2013", "Pages":"4"},
{"ID":"51", "Number":"51", "Text":"№51 (январь)", "Year":"2014", "Pages":"4"},
{"ID":"52", "Number":"52", "Text":"№52 (февраль)", "Year":"2014", "Pages":"4"}
);

hash = top.location.href.split("#")[1];
if (!hash)
{
if ((Shkolyar.length-1) < 10) {
hash = ('0' + (Shkolyar.length-1));
} else {
hash = Shkolyar.length-1;
}
} else {
document.title = 'Выпуск газеты №' + Shkolyar[hash].Number + ' — $SITE_NAME$';
}

for (itemNumber = Shkolyar.length-1; itemNumber >= 0; itemNumber--)
{
if (!window['year'+Shkolyar[itemNumber].Year]) {

var yearItemLink = document.createElement('a');
yearItemLink.onclick = function() {
$('#year'+Shkolyar[itemNumber].Year).slideToggle('300');
};
yearItemLink.title = 'Номера газеты за '+(Shkolyar[itemNumber].Year)+' год';
yearItemLink.appendChild(document.createTextNode((Shkolyar[itemNumber].Year)+' год'));
leftmenu.appendChild(yearItemLink);

var yearList = document.createElement('div');
yearList.id = 'year'+(Shkolyar[itemNumber].Year);
if ((Shkolyar[itemNumber].Year) == (Shkolyar[hash].Year)) {
yearList.style.display = 'block';
}
yearList.className = 'yearlist';
leftmenu.appendChild(yearList);

document.getElementById('leftmenu').innerHTML += '<br />'
}

var paperLink = document.createElement('a');
paperLink.href = 'javascript:location.hash=\'#'+(Shkolyar[itemNumber].ID)+'\'; location.reload()';
paperLink.title = 'Школяр ' + Shkolyar[itemNumber].Text.slice(0, -1) + ', ' + Shkolyar[itemNumber].Year + ' год)';
if (itemNumber == hash) {
paperLink.style.paddingLeft = '20px';
paperLink.style.color = '#2573D5';
}
paperLink.appendChild(document.createTextNode(Shkolyar[itemNumber].Text));
window['year'+Shkolyar[itemNumber].Year].appendChild(paperLink);
}

for (listNumber = 1; (listNumber-1) < Shkolyar[hash].Pages; listNumber++)
{
var paperImage = document.createElement('img');
paperImage.id = 'paperimage';
paperImage.src = 'http://shkolyar.my1.ru/shkolyar/' + Shkolyar[hash].Number + '/' + listNumber + '.jpg';
paperImage.alt = 'Школяр ' + Shkolyar[hash].Text.slice(0, -1) + ', ' + Shkolyar[hash].Year + ' год), страница ' + listNumber;
paperImage.title = 'Школяр ' + Shkolyar[hash].Text.slice(0, -1) + ', ' + Shkolyar[hash].Year + ' год), страница ' + listNumber;
paperImage.width = '720';
paper.appendChild(paperImage);
}

var downloadLink = document.createElement('a');
downloadLink.id = 'downloadlink';
downloadLink.href = 'http://shkolyar.my1.ru/shkolyar/' + Shkolyar[hash].Number + '/' + Shkolyar[hash].Number + '.zip';
downloadLink.title = 'Скачать оригинал этого номера газеты'; 
var textLink = document.createTextNode('Скачать оригинал этого номера газеты');
downloadLink.appendChild(textLink);
paper.appendChild(downloadLink);
</script>
</div>

рони 06.03.2014 15:33

Павел Пичужкин,
:write: строка 83 на сайте
yearItemLink.href = 'javascript:$(\'#year'+(Shkolyar[itemNumber].Year)+'\').slideToggle(\'300\'); return false';


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