多重问题:JQ 点击打开与关闭事件、AJAX根据当前点击的位置获取指定数组、数据缓存占据问题

发布于 2022-09-06 21:00:59 字数 3299 浏览 26 评论 0

问题描述

当前有一个商品价格表,通过不同分类获取当前分类下的商品名称、类型、数量、价格。
有一个按钮控制分类列表的打开与关闭。但是每点击一次都会重复获取数据。
通过 $.each() 遍历获取之后,不同分类中的 HTML 结构与数据重复。

  • 如何控制在我点击“打开”(此刻状态为“关闭”)时,列表才获取数据,当再次点击时(此刻状态为“打开”)不再接收数据?
  • 如何控制当前分类下获取的是当前分类下的数据?

实例代码

HTML

<td data-toggle="collapse" data-name="{$category.name}" data-target="#{$category.categoryid}" aria-expanded="false" aria-controls="collapseExample">
    打开/关闭按钮
</td>
<tr class="collapse" id="{$category.categoryid}">
    <td colspan="5" class="ajaxProject">
        <div class="container table-responsive">
            <table class="table table-goods">
                <thead class="thead-grey">
                    <tr>
                        <th scope="col">设备</th>
                        <th scope="col">数量</th>
                        <th scope="col">总价</th>
                    </tr>
                </thead>
                <!-- /.表格标题 -->
                <tbody>
                    <tr data-details="goodsDetails"></tr>
                    <!-- /.商品类目 -->
                </tbody>
            </table>
        </div>
    </td>
</tr>

JS

// 点击“详情”按钮切换图标获取数据
$("[data-toggle=collapse]").click(function()
{
    // 点击“详情”按钮切换图标翻转状态
    $(this).toggleClass('iconflip');

    // AJAX 获取数据
    var categoryName = $(this).attr('data-name');
    function getDatabase()
    {
        $.ajax({
            url: 'index.php?m=Mobile&c=Project&a=ajaxProjectTotal&id={$project.id}&name=' + categoryName,
            type: 'GET',
            success: function(data)
            {
                var html = '';
                var obj = eval ("(" + data + ")");
                console.log(obj);
                $.each(obj.result, function(idx, val)
                {
                    html += '<tr><th scope="row"><div class="row">';
                    html += '<div class="col goods-title">' + val.goods_name + '</div>';
                    // 获取商品标题
                    html += '<div class="w-100"></div>';
                    html += '<div class="col goods-model">' + val.typenum + '</div>';
                    // 获取商品型号
                    html += '</div></th>';
                    html += '<td>' + val.number + '</td>';
                    // 获取商品数量
                    html += '<td>' + val.shop_price + '</td></tr>';
                    // 获取商品价格
                });
                
                $("[data-details=goodsDetails]").before(html);
                // 在 html 中输出
            }
        });
    }
    getDatabase();
});

IMG

图片描述

图片一:当点击分类 1 “打开”按钮时数据递交至表格,点击分类 2 时分类 1 的数据依然传递至这里。

图片描述

图片二:两次点击时的打印内容。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尹雨沫 2022-09-13 21:00:59

$(this).toggleClass('iconflip');
你这个里不是有个iconflip吗?判断有这个class就不请求了

$("[data-details=goodsDetails]").before(html);
然后你说的那个分类,还是因为你的选择器没有限定分类。比如通过this获取到分类,然后parent在去find


http://jquery.cuishifeng.cn/h...
http://jquery.cuishifeng.cn/p...
http://jquery.cuishifeng.cn/f...

clipboard.png
clipboard.png
clipboard.png

筱武穆 2022-09-13 21:00:59

@linong

经过尝试后发现如果使用 hasClass() 来做判断其实也还是会重复调用。因为当 class="iconflip" 每次被切换时, hasClass() 会执行一次。

var iconFlip = $(this).attr('class');
    if ( iconFlip == 'iconflip' )
    {
        // 执行代码
    }

尝试后发现这个方法不会产生冗余和重复。


2018.03.20 问题已得到解决

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文