所以我在表单旁边有一个列表框。当用户单击选择框中的一个选项时,我请求相关数据,这些数据在一个JSON对象中返回,并被放入表单元素中。保存表单后,请求通过,并使用更新后的数据重新构建列表框。因为它正在被重建,所以我尝试在onchange代码的列表框的父div上使用委托。我遇到的问题是IE8 (令人震惊)没有触发委托事件。
我有以下HTML:
<div id="listwrapper" class="span-10 append-1 last">
<select id="list" name="list" size="20">
<option value="86">Adrian Franklin</option>
<option value="16">Adrian McCorvey</option>
<option value="196">Virginia Thomas</option>
</select>
</div> 以及与之配套的以下脚本:
window.addEvent('domready', function() {
var jsonreq = new Request.JSON();
$('listwrapper').addEvent('change:relay(select)', function(e) {
alert('this doesn't fire in IE8');
e.stop();
var status= $('statuswrapper').empty().addClass('ajax-loading');
jsonreq.options.url = 'de_getformdata.php';
jsonreq.options.method = 'post';
jsonreq.options.data = {'getlist':'<?php echo $getlist ?>','pkey':$('list').value};
jsonreq.onSuccess = function(rObj, rTxt) {
status.removeClass('ajax-loading');
for (key in rObj) {
status.set('html','You are currently editing '+rObj['cname']);
if ($chk($(key))) $(key).value = rObj[key];
}
$('lalsoaccomp-yes').set('checked',(($('naccompkey').value > 0)?'true':'false'));
$('lalsoaccomp-no').set('checked',(($('naccompkey').value > 0)?'false':'true'));
}
jsonreq.send();
});
}); (我去掉了一些不相关的东西)。因此,这一切在firefox中都能正常工作,但是IE8拒绝在select元素上触发委托的更改事件。如果我将change函数直接附加到select上,那么它就能正常工作。
我是不是遗漏了什么?IE8只是不喜欢:relay吗?
旁白:我对mootools和javascripting等非常陌生,所以如果在代码方面有什么可以改进的地方,也请让我知道。谢谢!
发布于 2010-05-03 05:11:13
元素委托在IE中的字段元素(input/select/textarea)上不起作用。
https://stackoverflow.com/questions/2754690
复制相似问题