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)も使用しないことに注意してくださいobj

ちなみに、これも.nextAll("#indlist")意味がありません。前述のとおり、「id」はドキュメント内で一意である必要があります。複数ある場合は、代わりにクラスを使用してください。


補足:が空の<?php if (!empty($list)) { ?>場合、for-each ループは起動しません。削除できると思います。$list

于 2012-06-25T07:25:43.887 に答える
0

next() メソッドの使い方が間違っています。

次()

説明: 一致した要素のセット内の各要素の直後の兄弟を取得します。セレクターが指定されている場合、そのセレクターに一致する場合にのみ、次の兄弟を取得します。

select タグは親 TD の唯一の要素であるため、兄弟はありません。

コード内の次の選択に到達するには、親までトラバースする必要があり、親の兄弟に移動してそこで選択を見つけます

BUT: 選択には ID があります。したがって、IDをセレクターとして使用してください。

交換:

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

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

で同じことをするobj.nextAll('#indlist')

于 2012-06-25T07:29:11.163 に答える