【问题标题】:How to change current background color of button onclick jQuery如何更改按钮onclick jQuery的当前背景颜色
【发布时间】:2020-06-11 08:58:57
【问题描述】:

我使用测验,我想更改按钮的颜色,所以当我点击按钮时,我想更改他的背景颜色,我有 div,其中我有 dynamycaly 创建的按钮,对于这个按钮,我想改变颜色。

JS:

var quiz = [
    { stepName: "Check Oil", frequency: "1 / Shift", stepDescription: "Verify the presence of spilled oil", image: "https://cdn.iconscout.com/icon/free/png-512/schedule-maintenance-1575170-1331504.png", choices: ["OK", "NOK", "N/A"], savedAnswer: "" },
    { stepName: "Check noise", frequency: "1 / Shift", stepDescription: "Check for unusual noise from machine", image: "", choices: ["OK", "NOK", "N/A"], savedAnswer: "" },
    { stepName: "Clean filter", frequency: "1 / Week (Monday)", stepDescription: "Clean the air filter at compressed air inlet", image: "https://cdn.iconscout.com/icon/free/png-512/schedule-maintenance-1575170-1331504.png", choices: ["OK", "NOK", "N/A"], savedAnswer: "" },
    { stepName: "Check Andon", frequency: "1 / Shift", stepDescription: "Check if andon light is on", image: "https://cdn.iconscout.com/icon/free/png-512/schedule-maintenance-1575170-1331504.png", choices: ["OK", "NOK", "N/A"], savedAnswer: "" },
    { stepName: "Safety barrier", frequency: "1 / Shift", stepDescription: "Check the proper functionality of light barrier(s)", image: "https://cdn.iconscout.com/icon/free/png-512/schedule-maintenance-1575170-1331504.png", choices: ["OK", "NOK"], savedAnswer: "" }
];

var index = 0;

function parseQuiz() {
    for (var i = 0; quiz.length > i; i++) {
        creatingAnswers(quiz[index].choices[i]);
        setQuizToDiv(quiz[index].stepName, quiz[index].frequency, quiz[index].stepDescription, quiz[index].image);
    }
}

function setQuizToDiv(stepName, frequency, stepDescription, image) {
    $(".quiz-container").html('');
    var quizHtml;
    if (image != "") {
        quizHtml = `
        <div class="step-name">
            ${stepName}
        </div>
        <div class="frequency">
           Frequency: ${frequency}
        </div>
        <div class="step-desc">
           ${stepDescription}
        </div>
        <div class="step-image">
        <div id="overlay"></div>
        <img class="main-img" src="${image}" />
        </div>`;
    } else {
        quizHtml = `
        <div class="step-name">
            ${stepName}
        </div>
        <div class="frequency">
           Frequency: ${frequency}
        </div>
        <div class="step-desc">
           ${stepDescription}
        </div>
        <div class="separation-div"></div>
        `;
    }

    $(".quiz-container").append(quizHtml);
}

function creatingAnswers(choises) {
    if (choises != undefined) {
        var answers = `<button class="btn next-btn">${choises}</button>`
        $(".answ-container").append(answers);
    }
}

parseQuiz();

$(".quiz-container").on("click", ".main-img", function () {
    $('#overlay')
        .css({ backgroundImage: `url(${this.src})` })
        .addClass('open')
        .one('click', function () { $(this).removeClass('open'); });
});

$(".answ-container").on("click", ".next-btn", function () {
    let indexData = index + 1;
    let arrayData = quiz.length - 1;
    if (indexData <= arrayData) {
        quiz[index].savedAnswer = $(this).text();
        index++;
        $(".answ-container").html("");
        parseQuiz();
        navButton();
    }
});

HTML:

<div class="quiz-container"></div>
<div class="answ-container"></div>

所以我尝试在这个函数中改变背景颜色

$(".answ-container").on("click", ".next-btn", function () {

添加此代码:

$(this).css("background-color","red")

但这对我不起作用。 因此,单击时我想更改按钮的 bg,并且当我转到我着色的下一个问题 previus 按钮时。

工作示例:https://jsfiddle.net/qunzorez/Lnt8f2dv/8/

【问题讨论】:

  • 请制作一个正常运行的 sn-p、沙箱或小提琴。
  • 您的代码不起作用。我得到“&lt;a class='gotoLine' href='#289:9'&gt;289:9&lt;/a&gt; ReferenceError: navButton is not defined
  • @djcaesar9114 我刚刚修好了现在试试
  • @djcaesar9114 正如您在中间看到的那样,我有动态创建的按钮,例如这是 OK、NOK、N/A 并且单击时我想更改此按钮的颜色,当我去的时候保存到下一个问题上一个按钮颜色

标签: javascript html jquery


【解决方案1】:

如果我在第一个问题中回答好,然后我转到下一个问题,但我在上一个问题中犯了错误,我将有可能改变主意,为此我创建按钮 previus[sic],当用户点击上一个时,它是去上一个问题,应该显示上一个 [原文] 答案

creatingAnswers 中检查当前问题的savedAnswer

if (quiz[index].savedAnswer == choises)

然后做你的事(例如添加一个类)——在更新后的小提琴中(如下),我将append 换成了appendTo 来添加jquery obj,给出:

function creatingAnswers(choises) {
    if (choises != undefined) {
        var answers = `<button class="btn next-btn">${choises}</button>`
        var ans = $(answers).appendTo(".answ-container");
        if (quiz[index].savedAnswer == choises) {
            ans.addClass("userchoice");
        }
    }
}

更新小提琴:https://jsfiddle.net/187autjo/


还有一个较早的错误(在 cmets 中讨论)循环测验计数而不是答案计数 - 这也在小提琴中更新。

【讨论】:

    【解决方案2】:

    好的,我想我明白你想要什么。这是一个线索,以便您可以进步。我不会编辑你的 jsfiddle,因为你的代码非常混乱......

    你可以在你的 JS 里放什么:

    $(".answ-container").on("click", ".next-btn", function () {
      // adding the class to the clicked button
        $(this).addClass('clicked')
      // removing the class of the siblings
      $(this).siblings().removeClass('clicked')
      // saving the index of the answer clicked
      quiz[index].savedAnswer = $(this).index()
    

    您可以在 CSS 中添加什么:

    .clicked {
      background-color: green;
    }
    

    当您创建答案按钮时,您会为按钮添加“点击”类并保存索引。

    原则是玩类。

    【讨论】:

    • 我尝试了您的解决方案,但由于某种原因它不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    相关资源
    最近更新 更多