gpt4 book ai didi

javascript - IE7 + 原型(prototype) - 添加 SELECT 方法后跟 Element.addMethods() = 无 SELECT 方法

转载 作者:行者123 更新时间:2023-11-30 06:01:19 25 4
gpt4 key购买 nike

我是这个网站的新手,所以如果这个问题的格式看起来像垃圾,我深表歉意。

在IE7中,当我用Prototype的Element.addMethods添加一个SELECT方法,然后再次调用Element.addMethods时,我添加的方法没有了。

例子:

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"></script>
<script type="text/javascript">
Element.addMethods(
'SELECT',
{
getSelected : function(elem){
elem = $(elem);
if(!elem.multiple){
return elem.options[elem.selectedIndex] ? $(elem.options[elem.selectedIndex]) : null;
}
return $A(elem.options).findAll(function(option){return option.selected;}).map(Element.extend);
}
}
);
Element.addMethods();
function displayResult(elem){
var selected = $(elem).getSelected();
if(Object.isArray(selected)){
var ret = '';
selected.each(function(optionElem){
ret += (ret ? ', ' : '') + option.innerHTML;
})
alert('['+ret+']');
}
else {
alert(selected.innerHTML);
}
}
</script>
</head>
<body>

<form>
Select your favorite fruit:
<select id="mySelect">
<option>Apple</option>
<option>Orange</option>
<option>Pineapple</option>
</select>
</form>
<input type='button' value='Display' onclick='displayResult("mySelect")'>
</body>
</html>

我意识到在此示例中,对 Element.addMethods() 的调用是多余的,但它来 self 无权更新的库。但是,我确实可以控制 SELECT 方法的添加方式,而不是它发生在代码执行的位置。

关于如何防止此删除特定于标签的方法的任何想法,其他使用像样的浏览器?

最佳答案

Element.addMethods 显然不应该在没有参数的情况下调用,参见 Element.addMethods documentation . Prototype 本身似乎在内部使用它来最初添加 Prototype 扩展,但再次调用它似乎会在 IE 中恢复一个新的原型(prototype),从而删除您自己的所有扩展。

我看到了两种可能的解决方法:

  1. 如果您有权访问 Element.addMethods(); 行,请将其删除或替换为

    Element.addMethods({});
  2. 在您的代码中修补 Element.addMethods 以防止空调用,例如通过在 getSelected 定义之前或之后(但在 Element.addMethods();)行之前或之后插入以下重新定义:

    Element.addMethods = Element.addMethods.wrap(function(callOriginal) {
    if (arguments.length == 1) {
    callOriginal.call(Element, {});
    } else {
    var args = $A(arguments);
    args.shift();
    callOriginal.apply(Element, args);
    }
    });

关于javascript - IE7 + 原型(prototype) - 添加 SELECT 方法后跟 Element.addMethods() = 无 SELECT 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8345718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com