javascript - 在 Click 事件中从多个 div 中删除/添加悬停事件

标签 javascript jquery html css

我正在尝试制作一个 5 分制的量表。我希望用户通过从 1(强烈不同意)到 5(强烈同意)的等级中选择一个值来选择他们对陈述的感受。

我使用多个 Div 制作了比例尺。我为体重秤上的每个数字使用 1 个 div。当用户将鼠标悬停在比例尺的一部分上时,所有之前的 div 都将突出显示。例如,用户将鼠标悬停在“3 - 同意”上,div 1、2 和 3 的背景颜色将更新:

    $(function() {

    // set up values and text
    var scaletext = {
        1: 'Strongly Disagree',
        2: 'Disagree',
        3: 'Neutral',
        4: 'Agree',
        5: 'Strongly Agree'
    };

    var colors = ["red", "darkorange", "yellow", "lightgreen", "green"];

    $('.scale').hover(function() {

        var $this = $(this);

        $this.prevAll('.scale').addBack().each(function(i) {
            $(this).css("background", colors[i])
        })

        $this.siblings('.scale-text').html(scaletext[$this.data('scale')]);

    // on mouse off of hover, set everything back to blank
    }, function() {

        var $this = $(this);

        $this.prevAll('.scale').addBack().css('background-color', '');
        $this.siblings('.scale-text').html("No Rating");

});

当用户将鼠标悬停在秤上时,秤会自行重置,所有背景元素都会变回白色。

我想要做的是添加一个点击事件,以便用户点击秤的一部分表示“设置”他们的决定。那时我希望发生的事情:

  1. 悬停事件应该在点击秤上的所有 div 时被禁用
  2. 如果用户再次点击,它应该重置比例并且悬停事件再次起作用。

我正在使用以下方法来解决 1) 但它不起作用。我单击的 div 已删除其鼠标事件,但如果我将鼠标悬停在任何其他元素上,则事件没有被删除。我也不知道如何解决 2)。也许有比我想的更好的方法。

.click(function() {
        var $this = $(this);

        $this.prevAll('scale').addBack().each(function(i) {
            $(this).unbind("mouseenter mouseleave");
        })

        $this.nextAll('scale').addBack().each(function(i) {
            $(this).unbind("mouseenter mouseleave");
        })

    });

此处为 HTML:

            <table>
            <thead>
                <tr>
                    <td class="section-name">Overall</td>
                    <td></td>
                    <td class="section-total-answered">2 unanswered</td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="question">Question1</td>
                    <td class="rating">
                        <div class="scale-text">No Rating</div>
                        <div data-scale="1" class="scale scale-1"></div>
                        <div data-scale="2" class="scale scale-2"></div>
                        <div data-scale="3" class="scale scale-3"></div>
                        <div data-scale="4" class="scale scale-4"></div>
                        <div data-scale="5" class="scale scale-5"></div>
                    </td>
                    <td class="comment"><a class="button" href="#">Comment</a></td>
                </tr>
                <tr>
                    <td class="question">Question2</td>
                    <td class="rating">
                        <div class="scale-text">No Rating</div>
                        <div data-scale="1" class="scale scale-1"></div>
                        <div data-scale="2" class="scale scale-2"></div>
                        <div data-scale="3" class="scale scale-3"></div>
                        <div data-scale="4" class="scale scale-4"></div>
                        <div data-scale="5" class="scale scale-5"></div>
                    </td>
                    <td class="comment"><a class="button" href="#">Comment</a></td>
                </tr>
                <tr>
                    <td class="question">Question3</td>
                    <td class="rating">
                        <div class="scale-text">No Rating</div>
                        <div data-scale="1" class="scale scale-1"></div>
                        <div data-scale="2" class="scale scale-2"></div>
                        <div data-scale="3" class="scale scale-3"></div>
                        <div data-scale="4" class="scale scale-4"></div>
                        <div data-scale="5" class="scale scale-5"></div>
                    </td>
                    <td class="comment"><a class="button" href="#">Comment</a></td>                     
                </tr>               
            </tbody>
            <tfoot>
                <td></td>
                <td></td>
                <td><a class="next-button" href="">Next ></a></td>
            </tfoot>
        </table>

最佳答案

简单的解决方案无需太多更改即可工作:在您的点击处理程序中使用 $this.parent().addClass("clicked"); 然后在您的悬停函数中测试它是否已经被在你做任何事情之前点击:

if(!$this.parent().hasClass("clicked"))
{
  /* your code here */
}

在第二次点击时,您可以使用 $this.parent().removeClass("clicked"); 并且您已恢复并运行

关于javascript - 在 Click 事件中从多个 div 中删除/添加悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35109754/

相关文章:

javascript - 当使用 jQuery 从溢出区域外部对子元素进行动画处理时,元素不遵守隐藏的溢出

javascript - facebook无限 session key javascript

jquery - datatables.net 两列上的正则表达式过滤器

javascript - 从零重复的数组中随机生成名称?

Javascript 背景幻灯片(默认图像)

javascript - 我可以阻止点击触发网站的常规操作吗?

javascript - Jquery 后悬停效果不起作用

javascript - 使用 PHP 填充 Bootstrap 输入 - 字符串变量中出现空格错误

iphone - 如何从 UIWebView 的 html 文件中调用 objective-c 代码?

html - CSS - 以 {display : table} 显示的中心元素