0

我有一个包含 8 个下拉框的表单,其中填充了数据库条目(如果不存在,则为空白)。

例如:

<select name='admin_id[]' id='admin_select1st' class='listbox medium'>
<select name='admin_id[]' id='admin_select2nd' class='listbox medium'>

等等通过8个条目。

我想要做的(最终)是当这些选择框之一被更改时,它将使用 jQuery post 并更新文本输入字段。

现在发生的事情是,当我使用以下 jQuery 时,我会收到每个选择框的警报(而不仅仅是我更改的那个):

<script type='text/javascript'>
$("[id^=admin_select]").change(function() {
 alert('Handler for .change() called.');
});
</script>

现在这是预期的行为,因为我告诉它匹配任何以 admin_select 开头的 ID。我需要知道的是,有没有一种方法可以让我使用此代码一次,而不必为每个 admin_select1st、admin_select2nd、admin_select3rd 等写出来,重复我的代码 8 次?

4

3 回答 3

0

假设输入文本字段 ID id结果

如果您不想通过匹配任何 ID 来保留元素,则可以通过类选择器获取它们;如果需要多次绑定代码部分,可以使用 unbind

$(document).ready(function(){
    $(".listbox.medium").each(function() {
        $(this).unbind("change").bind("change", function() {
        $("#result").val(sel.val());
        });
    });
 });

完整代码在这里

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
            $(".listbox.medium").each(function() {
                $(this).change(function() {
                    $("#result").val($(this).val());
                });
            });
        });
    </script>
</head>
<body style="background-color: rgb(78, 120, 178);"><br />
    <input type="text" id="result" value="" />
    <select name='admin_id[]' id='admin_select1st' class='listbox medium'>
        <option></option>
        <option>1</option>
    </select>
    <select name='admin_id[]' id='admin_select2nd' class='listbox medium'>
        <option></option>
        <option>2</option>
    </select>
    <select name='admin_id[]' id='admin_select3st' class='listbox medium'>
        <option></option>
        <option>3</option>
    </select>
    <select name='admin_id[]' id='admin_select4nd' class='listbox medium'>
        <option></option>
        <option>4</option>
    </select>
    <select name='admin_id[]' id='admin_select5st' class='listbox medium'>
        <option></option>
        <option>5</option>
    </select>
    <select name='admin_id[]' id='admin_select6nd' class='listbox medium'>
        <option></option>
        <option>6</option>
    </select>
    <select name='admin_id[]' id='admin_select7st' class='listbox medium'>
        <option></option>
        <option>7</option>
    </select>
    <select name='admin_id[]' id='admin_select8nd' class='listbox medium'>
        <option></option>
        <option>8</option>
    </select>
</body>

于 2012-09-10T14:37:21.947 回答
0

重复警报中的问题在于,它位于生成 8 个选择框的 while 循环内,因此代码重复了 8 次,因此发出了 8 次警报。

将它移到 while 循环之外,现在它按预期工作。

于 2012-09-10T14:29:33.067 回答
0

正如您的问题下面的评论中提到的那样,您现在所拥有的应该可以工作。

或者你可以尝试这样的事情

$("[id^=admin_select]").each(

function( intIndex ){


    $(this).change(function(){
    alert(intIndex);
    });
}
);

我还没有测试它,但它应该做你想要的。

于 2012-09-10T14:19:24.057 回答