首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用不同内容的Json数据呈现onclick

使用不同内容的Json数据呈现onclick
EN

Stack Overflow用户
提问于 2021-03-29 20:09:59
回答 1查看 164关注 0票数 1

我很难将按钮连接到我的JSON结构。我希望每个按钮呈现每个域。我试着选择$('button')并应用onlclick()函数,但是它没有工作。是因为我使用JSON来呈现4个按钮,而不是为每个按钮创建一个HTML结构吗?

代码语言:javascript
复制
//landing domain info/deisgn and structure
const domainInfo = [{
    id: 001,
    domain: "Title 1",
    photo: "title-1.jpg",
  },
  {
    id: 002,
    domain: "Title 2",
    photo: "title-2.jpg",
  },
  {
    id: 003,
    domain: "Title 3",
    photo: "title-3.jpg",
  },
  {
    id: 004,
    domain: "Title 4",
    photo: "title-4.jpg",
  },
]

function domainTemplate(domaininfo) {
  return `
    <div class="box__shadow">
        <button id="myBtn" class="myBtn" type="button">
        <img src="${domaininfo.photo}" width="90%;"style="margin: 0em; padding: 0em;">
        <div class="cover-bkg-ser-domain4">
        <h4 style="overflow:hidden; color: #1a4177; font-weight: bold; font-size: 18px; padding: 1em; margin: 0em;">${domaininfo.domain}</h4>
        </div>
        </button>
    </div>
    `
}

document.getElementById("domainCat").innerHTML = `
${domainInfo.map(domainTemplate).join('')}
`

//Serice category data
const serviceData = [{
    domain1Data: [{
        "manager": "Manager Name",
        "subcat": "Subcategory name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": null
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
    ]
  },
  //domain 2 data 

  {
    domain2Data: [{
        "manager": "Manager Name",
        "subcat": "Subcategory name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": null
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
    ]
  },

  // domain 3 data
  {
    domain3Data: [{
        "manager": "Manager Name",
        "subcat": "Subcategory name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": null
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
    ]
  },

  //domain 4 data 
  {
    domain4Data: [{
        "manager": "Manager Name",
        "subcat": "Subcategory name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": null
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
      {
        "manager": "Manager Name",
        "subcat": "Subcategory Name",
        "logo": {
          "prefpart": "logo-1",
          "secpart": "logo-2",
          "locpart": "logo-3"
        }
      },
    ]
  }
]

function servTemplate(servicedata) {
  return `
    <div class="info-data" id="infodata">
        <table>
            <colgroup>
                <col width="30%"/>
                <col width="70%"/>
            </colgroup>
            <tr>
                <th colspan="2" class="header">
                <h3>${servicedata.subcat}</h3>  
                </th>
            </tr>
            <tr class="">
                <td class="title">
                    <h5>Section 1</h5>
                </td>
                <td class="text">
                    <img class="img-service" src="${servicedata.prefpart}">
                </td>   
            </tr>
            <tr>
                <td class="">
                    <h5>Section 2</h5>
                </td>
                <td class="">
                    <img class="img-service" src="${servicedata.secpart}">
                </td>
            </tr>
            <tr>
                <td>
                    <h5>Section 3</h5>
                </td>
                <td class="">
                    <img class="img-service" src="${servicedata.locpart}">
                </td>
            </tr>
        </table>
    </div>
    `
}

document.getElementById("serviceCat").innerHTML = `
${serviceData.map(servTemplate).join('')}
`
代码语言:javascript
复制
/*domain names and pics css*/

#domainCat {
  width: 100%;
}

.box__shadow {
  width: auto;
  height: auto;
  margin-top: 1em;
  display: flex;
  justify-content: center;
  align-items: center;
  float: left;
}

.myBtn {
  border: 0px solid #000000;
  outline: none;
  box-shadow: none;
  width: 260px;
  height: auto;
  background: none;
  margin: 1em 1.1em 5em 1.1em;
  padding: 0em -1em 5em -1em;
  float: left;
}

.myBtn:hover {
  outline: none;
  background: none;
  box-shadow: none;
  cursor: pointer;
}

.cover-bkg-ser-domain4 {
  background-color: #2BD5F2;
  margin: auto auto -2em auto;
  width: 90%;
}

.cover-bkg-ser-domain4:hover {
  background-color: rgba(165, 209, 238, 0.8);
}


/*list rendering css*/

#serviceCat {
  overflow: hidden;
  float: left;
  background-color: rgba(117, 117, 117, 0.8);
  /* Black w/ opacity */
  overflow: auto;
  /* Enable scroll if needed */
  width: 72.5%;
  /* Full width */
  height: 50%;
  /* Full height */
  top: 0;
  left: 0;
  margin-left: 2em;
}

.service-title {
  font-style: normal;
  font-weight: normal;
  font-size: 22px;
  text-align: center;
  color: #000000;
  width: 100%;
}

.info-data {
  width: auto;
  height: auto;
}

.img-service {
  width: 50%;
  margin: 1em;
  padding: 0em;
  display: block;
}

.header {
  width: 100%;
  background-color: #83e06c;
  text-align: center;
}

.row {
  display: inline;
  background-color: rgba(76, 76, 76, 0.4);
  width: 70%;
  height: auto;
  padding: 0.1em;
  margin: 0.2em;
}

.column-1 {
  width: 20%;
  height: auto;
  float: left;
  vertical-align: auto;
  margin-left: 2em;
  font-size: 20px;
  font-weight: bold;
}

.column-2 {
  width: 70%;
  height: auto;
  float: left;
  vertical-align: auto;
  margin-left: 2em;
}

table,
th,
tr {
  width: 100%;
}
代码语言:javascript
复制
<!DOCTYPE html>
<html>

<head>
  <title>Page Title</title>
</head>

<body>
  <section id="domainCat"></section>
  <section id="serviceCat"></section>

</body>

</html>

我只能使用jQuery作为一个库,因为我试图在SharePoint the部件中安装代码。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-30 08:18:06

因此,问题是您试图在动态创建的对象上添加单击侦听器。这里需要4个按钮,所以我们还应该在函数domainTemplate();中创建动态侦听器,我们还需要在这里传递索引,这样我们就可以了解我们单击哪个按钮并将类添加到所有按钮中。

代码语言:javascript
复制
function domainTemplate(domaininfo, index) {
  $(document).on('click',`.btn-${index}`, function() {
  document.getElementById("serviceCat").innerHTML = servTemplate(serviceData[index]);

  return `
    ...some html here
    <button id="myBtn" class="myBtn btn-${index}" type="button">
  `;
});

另外,我已经修复了您的servTemplate()函数。有一些对象我们需要调用,所以我们必须始终获得第一项对象。所以现在servicedata是正确的,如果我们这样称呼它的话。

代码语言:javascript
复制
function servTemplate(data) {
  const servicedata = data[Object.keys(data)[0]][0];

  return some html;
}

请检查这里的完整代码,https://jsfiddle.net/yh915e6o/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66860958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档