【问题标题】:for loop 4 DOM elements and their events in JSfor loop 4 DOM 元素及其在 JS 中的事件
【发布时间】:2017-07-25 07:15:19
【问题描述】:

我正在尝试循环这 3 个图像,然后是它们的 ul 和 li。单击后,我遇到了一个问题,即事件处理程序没有侦听除第一个图像之外的任何图像。请帮帮我。

Fiddle

JS

var main = function () {

    var recipeArray = ['drink', 'firstCourse', 'mainDish', 'dessert'];
    var recipeArrayLength = recipeArray.length;
    for (var i = 0; i < recipeArrayLength; i++) {

        var $checkBoxes = document.createElement('div');
        $checkBoxes.setAttribute("class", "checkBoxes");
        var $recipePicContainer = document.createElement('span');
        $recipePicContainer.setAttribute("class", "recipePicContainer");


        function makeRecipePic() {
            var recipe = document.createElement("IMG");
            recipe.setAttribute("src", "../images/grasshopper-cocktail.jpg");
            recipe.setAttribute("class", "recipe");
            $recipePicContainer.appendChild(recipe);

        }

        makeRecipePic();

        var mainContainer = document.getElementsByClassName('mainContainer');
        mainContainer[0].appendChild($checkBoxes);

        var $div = document.createElement('div');
        $div.innerHTML = 'CockTails';
        $recipePicContainer.appendChild($div);
        $checkBoxes.appendChild($recipePicContainer);

        var $recipes = document.createElement("ul");
        var $checkboxes = document.getElementsByClassName('checkBoxes');

        var x = document.createElement("INPUT");
        x.setAttribute("type", "checkbox");
    }
        for (var j = 1; j <= 6; j++) {
            var li = document.createElement("li");
            li.className = "ingredients";
            li.setAttribute("type", "checkbox");


            var a = document.createElement("a");
            a.innerHTML = "Ingredient " + j;

            li.appendChild(a);
            $recipes.appendChild(li);
        }
        var b = document.createElement("li");
        li.innerHTML = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
        li.className = "Instructions";

        $checkboxes[0].appendChild($recipes);
        $('.recipes').hide();
        $('<input type="checkbox" value="1" />').prependTo(".ingredients");
        $('.mainContainer .recipePicContainer').click(function () {
            $(this).next('ul').toggle("slow").toggleClass('selected');

        });
};
$(document).ready(main);

【问题讨论】:

  • 您的事件处理程序在每次图像点击时监听事件,您的内部逻辑错误,请将 console.log() 或 alert 放在点击处理程序函数中
  • 嘿@Nitin,我试试thanx!

标签: javascript jquery html for-loop dom


【解决方案1】:

您只是将 ul 和 li 元素附加到第一个复选框。因此,当任何其他事件触发 onclick 事件时,没有任何内容可显示。

$checkboxes[0].appendChild($recipes);

您需要像在此处对第一个复选框所做的那样,将子级附加到其他复选框,以便它们显示某些内容。

【讨论】:

  • 好的,我明白了..thanx!我试一试。
  • 就像 $checkboxes[i].appendChild($recipes); ?
  • 是的,类似于@DanEker,但请确保在执行此操作时循环遍历所有复选框元素
猜你喜欢
  • 2011-08-12
  • 2021-07-23
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多