【问题标题】:Default option for javascript/jQuery filter hides all table rowsjavascript/jQuery 过滤器的默认选项隐藏所有表行
【发布时间】:2016-05-09 05:28:49
【问题描述】:

请看下面的jsfiddle。

https://jsfiddle.net/51Le6o06/42/

如您所见,表格过滤器 ('.filter-gift') 使用其下方 HTML 表格中的数据填充自身。我隐藏了所有其他脚本,以便更容易看到。

问题是当我选择一个过滤器(例如“免费电视”)时,相应的表格过滤器正确,但如果我在表格中选择默认过滤器选项,过滤器会隐藏所有行。

理想情况下,选择默认选项“-Select-”应该显示所有行,我该如何更改我的代码,所以我的函数就是这种情况。

使用 jQuery/Javascript:

$(document).ready(function() {
    $('.filter-gift').each(filterItems);
});

function filterItems(e) {
    var items = [];
    var table = '';
    tableId = $(this).parent().parent().attr('tag')

      var listItems = "";
        listItems += "<option value='0'> -Select- </option>";
        $('div[tag="' + tableId + '"] table.internalActivities .information').each(function (i) {
            var itm = $(this)[0].innerText;
            if ($.inArray(itm, items) == -1) {
                items.push($(this)[0].innerText);
                listItems += "<option value='" + i + "'>" + $(this)[0].innerText + "</option>";
            }
        });

    $('div[tag="' + tableId+ '"] .filter-gift').html(listItems);

    $('.filter-gift').change(function () {
        var tableIdC = $(this).parent().parent().attr('tag');

        var text = $('div[tag="' + tableIdC + '"] select option:selected')[0].text.replace(/(\r\n|\n|\r| |)/gm, "");;
            $('div[tag="' + tableIdC + '"] .product-information-row').each(function (i) {
                if ($(this).text().replace(/(\r\n|\n|\r| |)/gm, "") == text) {
                    $(this).show();
                    $(this).prev().show();
                    $(this).next().show();
                }
                else {
                    $(this).hide();
                    $(this).prev().hide();
                    $(this).next().hide();
                }
            });           
        });     
}

【问题讨论】:

    标签: javascript jquery html drop-down-menu


    【解决方案1】:

    将值设置为 999 > 使用 if($(this).val()!= 999) else 语句如下

    $('.filter-gift').change(function () {
        if($(this).val()!= 999) {
            var tableIdC = $(this).parent().parent().attr('tag');
    
            var text = $('div[tag="' + tableIdC + '"] select option:selected')[0].text.replace(/(\r\n|\n|\r| |)/gm, "");;
                $('div[tag="' + tableIdC + '"] .product-information-row').each(function (i) {
                    if ($(this).text().replace(/(\r\n|\n|\r| |)/gm, "") == text) {
                        $(this).show();
                        $(this).prev().show();
                        $(this).next().show();
                    }
                    else {
                        $(this).hide();
                        $(this).prev().hide();
                        $(this).next().hide();
                    }
                }); 
                } else {
                $(this).parent().parent().find('table tr').show();
                }
            }); 
    

    【讨论】:

    • 我在上面的代码中添加了 else 部分。希望有帮助
    • 是的,我发现您的 select 选项值是 o 并且对于免费电视也是相同的。将 Free TV 值更改为 1 或将值选择为“”。 。这些选项是通过 jquery 生成的吗?
    • 您可以从那里更改值吗?我无法从 jsfiddle 访问该文件。请注意,所有下拉菜单的问题都是相同的。在一个下拉菜单中为 2 个选项设置相同的值是一种不好的做法。 ping 任何帮助
    • 是的,你说得对,这也有效,@Scott 更好 $(this).find(':selected').text() != "-Select-" 如果有效,请选择正确的答案为你。至少我们识别问题区域也是正确识别问题的评论。这将帮助其他人快速进入主题。美好的一天
    • 好的做法是使用空字符串 "" 作为这样的选择选项,它只是一个使用消息,不需要保存任何值。这种方法到处都在遵循。如果您的列表将来没有超过 999 的值,那没关系,即使您可以让它更接近 9999。
    猜你喜欢
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多