如何在同一页面中两次使用 JQuery 函数?

5级猫

我不是很擅长编码,但我最终会为我的办公室做一些事情。

我目前正在构建一个手风琴,它携带来自 json 的一些信息。我使用我在互联网上获得的 JQuery 代码来构建它。

问题是我试图在同一个 HTML 页面中调用这个 JQuery 函数两次,用两个不同的 json 数据构建两个不同的手风琴集。

我尝试更改 JQuery,调用一个“accordion.init()”和另一个“accordion2.init()”,有几种不同的变体,但没有成功。

我的 html 非常直接:

<script src="fase2.js"></script>
<div class="container">
<section class="accordion"></section> 
</div>

以及HTML继承的js文件:

jQuery(document).ready(function($){
    var accordion={
        init:function(){
            this.accordionJson='fase2.json';
            this.getData();
        },
        getData:function(){
            $.ajax({
                url:accordion.accordionJson,
                success:function(data){
                    var dataBlock=data.data;
                    accordion.iterateAccordionData(dataBlock);
                    accordion.hideAccordion();
                }
            });
        },
        iterateAccordionData:function(accordionData){
            for(i=0;i<accordionData.length;i++){
                $(".accordion").append("<article>");
            }
            accordion.appendAccordionContent(accordionData);
        },
        appendAccordionContent:function(accordionData){
            $('article').each(function(index){
                $('article').eq(index).append('<h2><img src= "' + accordionData[index]['Logo'] +'">' + accordionData[index]['FriendlyName'] + '<span> #'+  accordionData[index]['index'] + '</span></h2>');
                $('article').eq(index).append('<p><span>Role</span>:<br>' + accordionData[index]['Roles']+ '</p>')
                $('article').eq(index).append('<p><span>APIs:</span><br>'+accordionData[index]['ApiFamilyType']+'</p>');
                $('article').eq(index).append('<p><span>Endpoints:</span><br>'+accordionData[index]['ApiEndpoints']+'</p>');
                $('article').eq(index).append('<p><span>Organisation:</span><br>'+accordionData[index]['OrganisationName']+'</p>');
            });
        },
        hideAccordion:function(){
            $('p').hide();
            accordion.toggleAccordion();
        },
        toggleAccordion:function(){
            $('article').on('click',function(){
                $(this).find('p').slideToggle();
                $(this).toggleClass('active');
            });
        },
    };
    accordion.init();
});

我试图做的是调用第二个js文件,大多数变量的名称不同:

jQuery(document).ready(function($){
var accordion2={
    init:function(){
        this.accordionJson='fase2-n.json';
        this.getData();
    },
    getData:function(){
        $.ajax({
            url:accordion2.accordion2Json,
            success:function(data){
                var dataBlock=data.data;
                accordion2.iterateAccordionData(dataBlock);
                accordion2.hideAccordion();
            }
        });
    },
    iterateAccordionData:function(accordionData2){
        for(i=0;i<accordionData2.length;i++){
            $(".accordion").append("<article>");
        }
        accordion2.appendAccordionContent(accordionData2);
    },
    appendAccordionContent:function(accordionData2){
        $('article').each(function(index){
            $('article').eq(index).append('<h2><img src= "' + accordionData2[index]['Logo'] +'">' + accordionData2[index]['CustomerFriendlyName'] + '<span> #'+  accordionData2[index]['index'] + '</span></h2>');
            $('article').eq(index).append('<p><span>Role ITP</span>:<br>' + accordionData2[index]['Roles']+ '</p>')
            $('article').eq(index).append('<p><span>Família de APIs publicadas:</span><br>'+accordionData2[index]['ApiFamilyType']+'</p>');
            $('article').eq(index).append('<p><span>Endpoints publicados:</span><br>'+accordionData2[index]['ApiEndpoints']+'</p>');
            $('article').eq(index).append('<p><span>Organizações que utilizam está marca:</span><br>'+accordionData2[index]['OrganisationName']+'</p>');
        });
    },
    hideAccordion:function(){
        $('p').hide();
        accordion2.toggleAccordion();
    },
    toggleAccordion:function(){
        $('article').on('click',function(){
            $(this).find('p').slideToggle();
            $(this).toggleClass('active');
        });
    },
};
accordion2.init();
});

但我最终得到一个错误:

未捕获的类型错误:无法在 HTMLElement 处读取未定义的属性(读取“徽标”)。(fase2-n.js:25:88)

这是这一行:

$('article').eq(index).append('<h2>imgsrc="'+accordionData2[index]'Logo']+'">'+accordionData2[index]['CustomerFriendlyName']+'<span>#'+accordionData2[index]['index']+'</span></h2>');

这个错误让我感到困惑,因为如果我打印类似:console.log(accordionData2[0]['Logo']的内容,js 代码将为我的 json 中的徽标给出肯定的结果。

你能帮我理解什么是不正确的吗?

obs:手风琴加载正确,只调用了一个 jQuery。obs2:使用我在此处发布的代码,来自第二个 json 的数据与第一个手风琴一起加载,一个手风琴在另一个之上。我想上面的错误只在第一个json数据结束后出现(第一个json索引小于第二个)

卢修斯·塞戈维亚

我会做:

    jQuery(document).ready(function($){
    var accordion={
        init:function(jsonFile){
            this.accordionJson= jsonFile ;
            this.getData();
        },
        getData:function(){
            $.ajax({
                url:accordion.accordionJson,
                success:function(data){
                    var dataBlock=data.data;
                    accordion.iterateAccordionData(dataBlock);
                    accordion.hideAccordion();
                }
            });
        },
        iterateAccordionData:function(accordionData){
            for(i=0;i<accordionData.length;i++){
                $(".accordion").append("<article>");
            }
            accordion.appendAccordionContent(accordionData);
        },
        appendAccordionContent:function(accordionData){
            $('article').each(function(index){
                $('article').eq(index).append('<h2><img src= "' + accordionData[index]['Logo'] +'">' + accordionData[index]['FriendlyName'] + '<span> #'+  accordionData[index]['index'] + '</span></h2>');
                $('article').eq(index).append('<p><span>Role</span>:<br>' + accordionData[index]['Roles']+ '</p>')
                $('article').eq(index).append('<p><span>APIs:</span><br>'+accordionData[index]['ApiFamilyType']+'</p>');
                $('article').eq(index).append('<p><span>Endpoints:</span><br>'+accordionData[index]['ApiEndpoints']+'</p>');
                $('article').eq(index).append('<p><span>Organisation:</span><br>'+accordionData[index]['OrganisationName']+'</p>');
            });
        },
        hideAccordion:function(){
            $('p').hide();
            accordion.toggleAccordion();
        },
        toggleAccordion:function(){
            $('article').on('click',function(){
                $(this).find('p').slideToggle();
                $(this).toggleClass('active');
            });
        },
    };
    accordion.init('fase2.json');
    accordion.init('fase3.json');
});

然后你可以有一个函数,在 init() 道具中发送文件名。如果您需要多个手风琴同时工作,则应将 $("article") 替换为 $(this).find("article") 之类的东西,这样选择器将仅触及发起者最近的元素,而不是他们都是

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

同一页面上的 JQuery 函数 POST 仅工作两次

如何在同一页面上两次使用相同的jquery脚本

jQuery克隆表单在同一页面中两次无法正常工作

在同一页面上两次使用js函数

jQuery表单在同一页面中

如何在不提交表单的情况下在php同一页面中使用jquery变量

为什么两个jquery函数不能在同一页面上工作?

使用jQuery在同一页面中的多个选项卡

使用jQuery将数据传递到同一页面中的标签

在同一页面上两次启动自定义JavaScript插件时,如何解决“未捕获的TypeError:tagsInput不是构造函数”错误

如何在同一个选择中两次使用函数结果

React:如何在同一页面中两次使用相同的组件,但只为一次加载一个脚本标签

在同一页面中调用php函数onclick按钮

如何在同一页面上使用Prototype和jQuery而不出现问题

在同一页面中处理原型和jQuery,包括外部js文件

JQuery Datatable在同一页面MVC中的多个表

使用jQuery将GET请求发送到同一页面

jQuery:使用参数向同一页面进行获取请求

在同一页面中使用 2 个不同的 jquery t-datepickers

jQuery函数不会运行两次

jQuery嵌套函数循环两次

jQuery函数触发两次

动画函数jQuery运行两次

未捕获的TypeError:无法读取null的属性“样式”。在同一页面中使用两个Javascript函数

如何使用HTML和JQUERY将页面跳转到另一页面

如何在同一个jQuery函数中使用两个追加?

如何在js函数的同一页面上创建多个实例

如何在同一页面上以html形式操作php函数?

基于关闭HTML内容是用户在同一页面中两次登录