0

我正在使用一个 JQuery 函数,该函数在选择列表上发生实时更改事件时调用另一个函数。这是我的 JQuery 函数

    var formObject = {
    run : function(obj) {
        if (obj.val() === '') {
            obj.next('#indlist').html('<option value="">Select Topic First</option>').attr('disabled', true);
        } else {
            var v = obj.val();
            jQuery.getJSON('/lib/update.php', {topicid : v }, function(data) {
                if (!data.error) {
                    obj.next('#indlist').html(data.list).removeAttr('disabled');
                } else {
                    obj.nextAll('#indlist').html('<option value="">Select Topic Correctly</option>').attr('disabled', true);
                }
            });
        }
    }
};
$(function() {

    $('#update').live('change', function() {
        formObject.run($(this));
    });

});

这是我的PHP代码:

<div class="dropdownlist">
    <form action="" method="post">
       <table width="500px">
       <tr>
       <td>
        <select name="gender" id="update">
            <option value="">Select one</option>
            <?php if (!empty($list)) { ?>
                <?php foreach($list as $row) { ?>
                    <option value="<?php echo $row['topicid']; ?>">
                        <?php echo $row['topicname']; ?>
                    </option>
                <?php } ?>
            <?php } ?>
        </select>
        </td></tr><tr><td>
        <select name="category" id="indlist"
            disabled="disabled">
            <option value="">----</option>
        </select>
        </td></tr></table>
    </form>
</div>

但它不起作用并且没有填充下一个选择列表

4

2 回答 2

1

错误.next()可能在。

#indlist在一个完全不同的 DOM 分支中,你不能指望.next()找到它,因为它找到了下一个兄弟

TR
  TD
    SELECT#update
    ?? <---- .next("#indlist")? There's no obj after #update with that id!
  /TD
/TR
TR 
  TD
    SELECT#indlist
  /TD
/TR

如果#indlist是唯一的(如果您使用的是 id应该$("#indlist")是唯一的!),只需使用.

$("#indlist").html("<option ... etc.>");

如果没有,最好使用一个类 ( <select class='indlist' ...>) 并找到元素:

$(obj).parent("table").find(".indlist")

请注意,我也使用$(obj)and not obj

顺便说一句也.nextAll("#indlist")没有意义:正如我所说,“id”在文档中必须是唯一的,如果有多个,请尝试使用一个类。


旁注:我认为<?php if (!empty($list)) { ?>可以删除,如果$list为空,则 for-each 循环不会触发。

于 2012-06-25T07:25:43.887 回答
0

您错误地使用了 next() 方法。

下一个()

描述:获取匹配元素集中每个元素的紧随其后的兄弟。如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

由于您的选择标签是其父 TD 中唯一的元素,因此它们没有兄弟姐妹。

要在代码中进行下一个选择,您需要遍历父级,转到父级的兄弟姐妹并在那里找到选择

但是:选择有一个 ID。所以只需使用 ID 作为选择器。

代替:

obj.next('#indlist').html....

$('#indlist').html.....

做同样的事情obj.nextAll('#indlist')

于 2012-06-25T07:29:11.163 回答