проблема в использовании appendchild в IE7 - PullRequest
1 голос
/ 13 апреля 2010

Найдите ниже функцию js, которую я использую, чтобы добавить новое поле даты и ссылку «Выбрать место проведения» на существующий div с идентификатором «coursedates». Проблема в том, что это нормально работает в FF 3 и IE 8.
Это не работает в IE7. Если я предупреждаю счетчик (длину) 'dts', он всегда говорит 1, хотя панель инструментов разработчика IE показывает, что новая дата div добавлена ​​к указанным курсам. Я попытался использовать innerHtml вместо appendchild, но в этом случае прослушиватели старых элементов div coursedt, таких как selven + new_course_dt_index, теряются. Есть ли решение для этого.

Заранее спасибо.

addnewcoursedate: function () {

var dts = yud.getElementsByClassName('coursedt', 'div', 'coursedates');
var new_course_dt_index = parseInt(dts[parseInt(dts.length, 10)-1].id.split('coursedt')[1],10)+1;
var newdt = document.createElement('div');
newdt.setAttribute('class','coursedt');
newdt.setAttribute('id','coursedt'+new_course_dt_index);

var coursedt_htm = 
"<div class='clearfix flt_left'><label for='coursestartdt"+new_course_dt_index+"'>Start Date & Time </label><a href='javascript:NewCssCal(\"coursestartdt"+new_course_dt_index+"\",\"ddmmyyyy\",\"arrow\",true,12,false);'><img src='calbtn.gif' width='16' height='16' border='0' alt='Pick a start date & time'></a><br/>"+
    "<input type='text' id='coursestartdt"+new_course_dt_index+"' name='coursestartdt"+new_course_dt_index+"' value=''> </div>"+
    "<div class='flt_left'><a href='#' class='selven' id='selven"+new_course_dt_index+"'>Select Venues</a><br/><input type='hidden' name='venues"+new_course_dt_index+"' id='venues"+new_course_dt_index+"'><div class='selvenue' id='venueshw"+new_course_dt_index+"'>&nbsp;</div></div>"+
    "<div class='flt_rght clr_lft'><a href='javascript:YAHOO.modname.event_js.removecoursedate(\""+new_course_dt_index+"\");'><img title=\"Remove date\" src=\"clear_field.gif\" /></a></div>";
newdt.innerHTML = coursedt_htm;

var crsdts = yud.get('coursedates');
crsdts.appendChild(newdt);

var newbr = document.createElement('br');
newbr.setAttribute('class','lstclr');
newbr.setAttribute('id','lstclr'+new_course_dt_index);

crsdts.appendChild(newbr);

if ( YAHOO.modname.event_js.ven_dlgs[new_course_dt_index] == null ) {
    YAHOO.modname.event_js.ven_dlgs[new_course_dt_index] = _createVenueDialog(new_course_dt_index);
}

},

примечание: юд: YAHOO.util.Dom

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

Нашел проблему. По какой-то причине IE7 не распознал класс 'coursedt', добавленный в новый div.

newdt.setAttribute ( 'класс', 'coursedt')

Но это сработало, когда я изменил код на следующий:

var attr = document.createAttribute ('class'); attr.value = 'coursedt'; newdt.setAttributeNode (атр); * +1007 *

Это работает для FF & IE 6,7,8.

0 голосов
/ 17 декабря 2013

Я также обнаружил, что эта проблема может возникать, когда функция в одном окне пытается вызвать appendChild для элемента в другом окне, это означает, что оба элемента должны находиться в одном и том же документе (что вполне очевидно), но по крайней мере IE должен что-то сказать по этому поводу.

...