【问题标题】:JavaScript change color of div "array" on click?JavaScript在点击时改变div“数组”的颜色?
【发布时间】:2013-09-02 00:30:15
【问题描述】:

我想创建一个问卷,其中用户有一定数量的分数,他们可以分配给不同的类别。分配因用户而异。 分配点应通过以下方式实现:

  1. 点数显示为一个框数组(浮动 div 或表格 td。哪个更好?)。未使用的点显示为橙色,已使用的点显示为石灰/绿色。

  2. 用户可以单击任何橙色框来指示他接下来要分配多少点。从左侧到(包括)单击的框的所有橙色框都以黄色突出显示。突出显示框的数量存储在隐藏的表单字段中。

  3. 用户现在单击他想要分配点数的类别/元素。通过单击元素,元素的名称、(2) 中的数字和其他表单内容通过 AJAX 发送到处理数据库内容的脚本。突出显示的黄色框现在变为绿色,并且计数器已更新。

例子:

我可以处理 AJAX 的东西,但是我不知道如何处理选择/突出显示“机制”。我的基本想法是:有一个变量points_spent,它从 0 开始,每次花费时间点都会增加(duh)。这些框是具有不同 CSS 类(box_spent、box_highlight、box_avaibale)来处理颜色的 div。

一个 JavaScript 正在检查 points_spent 的值,并将 id 为 box_1 的 div 的类更改为 box_nbox_spent

点击一个框会触发第二个 JavaScript。它检查点击是否有效(即在橙色或黄色框上)并相应地点亮这些框...

但是我如何用 JS 做到这一点?使用 PHP 执行此操作没有问题,但用户每次点击后都等待太可怕了:/

非常感谢任何帮助!

【问题讨论】:

    标签: javascript jquery css forms colors


    【解决方案1】:

    你可以这样做:

    $('.box_highlight,.box_available').click(function(e) {
       $clicked = $(e.target);
    
       // Highlight box that was just clicked
       $clicked.addClass('box_highlight').removeClass('box_available');
    
       // Find all elements to the left that aren't already spent and highlight them.
       $clicked.prevAll('.box_available').addClass('box_highlight').removeClass('box_available');
    
       // Remove highlight of any boxes to the right
       $clicked.nextAll('.box_highlight').removeClass('box_highlight').addClass('box_available');
    });
    
    $('.category').click(function(e){
    
       // The container of the clicked category
       $categoryEl = $(e.target);
    
       // Determine which category was clicked.
       var category = $categoryEl.html();
       var points = currentPointValue();
       var highlighted = $('#box_container').find('.box_highlight');
    
       $.post({
          /* Your ajax options go here */
          data: {
             category: category,
             points: points
          },
          success: function() {
              $categoryEl.append(points);
              $highlighted.removeClass('box_highlight').addClass('box_spent');
          }
       });
    });
    
    var $boxContainer = $('#box_container');
    
    function currentPointValue() {
       $boxContainer.find('.box_highlight').length;
    }
    

    【讨论】:

    • 感谢您的回复,我对 JS 相当陌生,之前主要使用 PHP。我将使用您的示例并尝试对其进行一些修改,然后发布它是如何进行的:)
    • 好的,我可能有一个非常基本的问题:我尝试了一个简单版本的脚本,它只返回点击框的 id。使用 $('.box_available .box_highlight').click(function() 不起作用,但是只使用一个类名就可以了。为什么会这样?我错过了一些重要的先决条件吗?
    • 我的错误,我省略了选择器之间的逗号。我已经更新了答案以反映正确的选择器。
    猜你喜欢
    • 1970-01-01
    • 2022-06-24
    • 2012-02-13
    • 2018-01-05
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    相关资源
    最近更新 更多