jquery 引导折叠-传递值或获取DOM对象

wyyhbhjk  于 2022-12-03  发布在  jQuery
关注(0)|答案(3)|浏览(104)

使用bootstrap,我使用collapse函数来折叠like this的表。我用以下代码连接到collapse js

<script type="text/javascript">
$('#demo1').on('shown.bs.collapse', function () {
    that = $(this);
    $.ajax({
        url:'{{ (path('orders')) }}',
                type: "POST",
                dataType: "json",
                data: {
                    "id": "1"
                },
                async: true,
                success: function (data)
                {
                    console.log(data)
                    $('div#demo1').html('<img src="data:image/png;base64,' + data.output + '" />');
                }
            });
            return false;

        });
    </script>

如何将一个值传递给该函数或者获取传递它的dom元素的名称(例如#demo1)?我基本上需要传递一个值作为id值传递给 AJAX POST。
我不能静态地Map值,因为我只是基于数据库返回生成行。

{% for x in search%}
            <tr data-toggle="collapse" data-target="#demo{{ loop.index }}" class="accordion-toggle">
                <th>{{ x.id}}</th>
            <tr>
                <td colspan="5" class="hiddenRow">
                    <div class="accordian-body collapse" id="demo{{ loop.index }}">
                        Demo{{ loop.index }} data
                    </div>
                </td>
            </tr>
        {% endfor %}

基本上,在上面的代码中,我需要访问x.id以传递给引导jQuery

zzwlnbp8

zzwlnbp81#

如果您的目标是多个折叠,则应该使用类选择器而不是id选择器:

$(function(){
    $('.accordian-body.collapse').on('show.bs.collapse', function(e) {
        ...
    });
});

您可以从**e.target.id**中获取折叠的DOM元素id。

// If using your example:
//   if you click on 1st row you will get:
demo1
//   if you click on 2nd row you will get:
demo2
//   if you click on 3rd row you will get:
demo3

如果除了id之外还有其他数据需要获取,可以在构建HTML时使用**data-**绑定数据,然后在目标对象上使用jQuery,并从那里开始:
HTML格式

<div class="accordian-body collapse" id="demo{{ loop.index }}" 
    data-index="{{ loop.index }}">
    Demo{{ loop.index }} data
</div>

JavaScript语言

$('.accordian-body.collapse').on('show.bs.collapse', function(e) {
    let $collapsedTarget = $(e.target),
        index = $collapsedTarget.data('index');
});

我不知道我是否回答了你的问题,因为你的问题我也不清楚。

yftpprvb

yftpprvb2#

这不是一个明确的问题,因为答案取决于...
这应该很简单,在Javascript中,你在函数之外设置一个变量,并声明它是全局的。

<script>let variable;</script>

<script>let variable = 0;</script>

<script>let variable = 'word';</script>

然后,无论是硬编码更改它,还是通过表单条目或选择项更改它,由于它是全局的,因此可以在函数中作为变量访问它。
您可以尝试以下操作:

{% for x in search <script>let variable=x;</script> %}
lpwwtiir

lpwwtiir3#

以防万一有人想看看结束代码(基于大卫Liang的答案)如何做到这一点...
小枝:

{% for x in search%}
        <tr data-toggle="collapse" data-target="#demo{{ loop.index }}" class="accordion-toggle">
            <th>{{ x.id}}</th>
        <tr>
            <td colspan="5" class="hiddenRow">
               <div class="accordian-body collapse" id="demo{{ loop.index }}" data-index="{{ x.id }}">
                    Loading...
               </div>
            </td>
        </tr>
    {% endfor %}

脚本:

<script type="text/javascript">
$('.accordian-body.collapse').on('shown.bs.collapse', function (e) {
    let $collapsedTarget = $(e.target),
        record_id = $collapsedTarget.attr('data-index');
    $.ajax({
        url:'{{ (path('orders')) }}',
                type: "POST",
                dataType: "json",
                data: {
                    "id": record_id.toString()
                },
                async: true,
                success: function (data)
                {
                    console.log('Record ID: ' + record_id);
                    console.log(data)
                    $(e.target).html('<img src="data:image/png;base64,' + data.output + '" />');
                }
            });
            return false;    
        });
</script>

并且它会将“Loading...”替换为.html()中的任何内容(在我的例子中是img标记)。

相关问题