2

私は自分の会社のウェブサイトの開発を引き継ぎました。card_filter div で選択ボックスの値が変更されると、次の JavaScript が実行されます。

      $("#cards_filter select").change(function(e) {
        var form = $(this);
        var serdata = form.serialize();
        var field_name = $(this).attr("name");
        var field_value = $(this).val();
        //Reset the selectors and keep the one that triggered filter
        $('#cards_filter').find('select').val(function(index,value){
            if($(this).attr("name") == field_name){
                return field_value;
            } else {
                return "-1";                    
            }
        });
      }

コレクション、アーティスト、カテゴリの選択ボックスがリセットされるのに対し、製品選択オプションがリセットされないようにしたいと思います。

            <form id="cards_filter" method="post" action="" name="cards_filter">
                    <?php echo get_product_selector("products_filter"); ?>
                    <?php echo get_collection_selector("products_filter"); ?>
                    <?php echo get_artist_selector("products_filter"); ?>
                    <?php echo get_category_selector("products_filter"); ?>
            </form> 

そして、次の関数は、各セレクターのライブラリーにあります

function get_product_selector($form_name) {
if (isset($_SESSION['loggedin']['cur_product'])) {
    $curr = $_SESSION['loggedin']['cur_product'];
} else {
    $curr = -1;
}
$rtn = "";
$rtn .= '<select id="product" name="product">';
$rtn .= '<option value="-1"';
if ($curr == -1) {
    $rtn .= ' selected';
}
$rtn .= '>Select a Product</option>';
$DB = new mysql_db();
$DB->sql_connect();
$q = "SELECT * FROM type order by type_title asc";
$DB->query($q);
if ($DB->get_num_rows()) {
    $results = $DB->fetch_all_rows(MYSQL_ASSOC, NULL);
    foreach ($results as $key => $row) {
        $rtn .= '<option value="' . $row['Type_ID'] . '"';
        if ($curr == $row['Type_ID']) {
            $rtn .= ' selected';
        }
        $rtn .= '>' . trim($row['Type_Title']) . '</option>';
    }
}
$rtn .= '</select>';

return $rtn;

}

4

1 に答える 1

2
$("#cards_filter select").on('change', function() {
    var serdata = $(this.form).serialize(),
        field_name = this.name,
        field_value = this.value;

    $("#cards_filter select").not('#product').val(function(index, value) {
        return this.name==field_name ? field_value : -1;
    });
});

よくわかりませんが、変更イベントは選択ボックスにありますがthis、フォームではなく選択をシリアル化していますか? また、「製品」選択には ID があるように見える#productので、値を変更しているセレクターからそれを除外しますか?

于 2012-12-16T18:53:28.193 に答える