2011-07-11 31 views
0

我的Mootools get方法和IE8有问题。这是事情。动态组合和mootools get方法在IE8中不起作用

我有一个动态加载与Request.HTML

HTML选项的选择组合:

<select name="model" id="model" class="customSelectModel"> 
    <option>Modelo</option> 
</select> 

的Javascript:

var req = new Request.HTML({ 
     method: 'get', 
     url: loadModels, 
     data: "model="+model, 
     update: $('model'), 
}).send(); 

此外,选择具有自定义样式,与此:http://vault.hanover.edu/~stilson/simpleselectstyle/

问题是当我加载的model内容,IE扔我的错误:

Object doesn't support this property or method.

我不知道为什么,但

span.addEvent('change',function(){ 
    span.set('text',this.options[this.options.selectedIndex].get('text')); 
}); 

不与IE8的工作(如通常情况下,它与其他浏览器完美的作品) 。我正在使用Mootools 1.3.2

任何想法?非常感谢。

回答

1

您不能更新一个跨浏览器的方式,其中update: $("model")尝试办通过innerHTML<select>元素的内容。

我会通过onComplete: function() {}建议重构操作如下:

  • 删除model
  • 迭代的所有子元素经由HTML格式发送选项元素,并将它们注入到model
  • 调用任何方法定制样式提供(如果有的话)为新对象成员更新modelfireEvent("change")以突出显示新选定的脚本选择,如果需要的话。

您的第二个问题。

this.options.get("value")返回选定值。

如果它是一个多选,它可以有多个值。

mootools提供了selectel.getSelected(),它返回一个可以迭代以获取文本的选项数组。因此:

selectel.getSelected().get("text")将在多重选择上返回["sometext"]["sometext1", "sometext2"]

+0

谢谢@Dimitar。正如你解释,删除的选择所有子.empty()之后,我已经试过这个'responseElements.each(功能(E迭代){\t \t \t \t \t \t \t \t即注($( '模型')); \t \t \t \t \t \t \t});'但它在IE中不起作用。我做错了什么? – Manu

+0

谢谢,伙计。我无法相信INTERNET EXPLORER如何制定自己烦人的规则,以及我们需要如何寻找解决方法......因此,在注入之前,解决方案是在选择中包装'',但我会无论如何请尝试JSON。 – Manu

+0

很奇怪。 http://jsfiddle.net/mpSsJ/4/ - >在jQuery中试过它,它的工作原理。所以他们必须在代码中有一个解决方法(我不是jQuery用户,所以这是一个实验)。去图 - 与一些没有留下深刻印象的mootools的核心开发者讨论。 –