需要更改属性值

时间:2010-10-30 00:30:15

标签: jquery

我再次提出这个问题,但希望更清楚一点。有关详细信息,请参阅此主题

javascript error in IE8 compatibitlity mode

我在页面上有以下标记,我无法直接更改。我需要将从“change_option”调用的函数更改为“changeoption”。如何为每个选择框完成此操作。我没有显示选项,因为它们在这种情况下不相关。

<select onChange="change_option('SELECT___100E___7',this.options[this.selectedIndex].value)" name="SELECT___100E___7">
<select onChange="change_option('SELECT___123___6',this.options[this.selectedIndex].value)" name="SELECT___123___6">
<select onChange="change_option('SELECT___584E___52',this.options[this.selectedIndex].value)" name="SELECT___584E___52">

2 个答案:

答案 0 :(得分:2)

这似乎相对简单:

$(document).ready(
    function(){
        $('select').each(
            function(){
                if ($(this).attr('onChange')) {
                    var onChangeString = $(this).attr('onChange').replace('change_option','changeoption');
                    $(this).attr('onChange',onChangeString);
                }
            }
        );
    }
);

我使用了以下(x)html(在<!DOCTYPE html>下,在Ubuntu 10.10上使用Chrome和Firefox):

<form action="#" method="post">
    <select onChange="change_option('SELECT___100E___7',this.options[this.selectedIndex].value)" name="SELECT___100E___7">
        <option value="0">dummy option 1</option>
        <option value="1">dummy option 2</option>
        <option value="2">dummy option 3</option>
        <option value="3">dummy option 4</option>
    </select>
    <select onChange="change_option('SELECT___123___6',this.options[this.selectedIndex].value)" name="SELECT___123___6">
        <option value="0">dummy option 1</option>
        <option value="1">dummy option 2</option>
        <option value="2">dummy option 3</option>
        <option value="3">dummy option 4</option>
    </select>
    <select onChange="change_option('SELECT___584E___52',this.options[this.selectedIndex].value)" name="SELECT___584E___52">
        <option value="0">dummy option 1</option>
        <option value="1">dummy option 2</option>
        <option value="2">dummy option 3</option>
        <option value="3">dummy option 4</option>
    </select>
</form>

Demo at JS Fiddle

<小时/> 编辑添加了一个事后的想法:个人而言,我强烈建议从(x)html中删除onChange事件,并将所有行为逻辑放在一起,而不是让它遍布你的html页面(因为留下它会导致像 this 这样的情况,不得不操纵一大堆元素而不是在一个文件中重写一个函数。

如果你真的无法编辑html,你总是可以使用jQuery删除onChange(和onClick等)事件处理程序,并使用链接的js文件来接管它们的功能。

答案 1 :(得分:1)

$(document).ready(
function(){
    $('select').each(
        function(){
              $(this).change(
                  function() {
                      changeoption(this.name,$(this).val());
                  }
              ).attr("onchange",function(){           
                               changeoption(this.name,this.options[this.selectedIndex].value); 
                     }
              );            
        } 
    );
});