【问题标题】:Selecting next div with Button and changing the value使用 Button 选择下一个 div 并更改值
【发布时间】:2015-11-10 11:31:11
【问题描述】:

我有 4 个 div 元素,每个元素都有自己的值,例如 0。我有一个带有加号和减号的按钮,可以更改每个框中的值。我还有一个设置下一个按钮,所以你可以对下一个框做同样的事情。

我面临的问题是如何选择下一个 div 并使用相同的加号和减号按钮更改值,然后选择下一个 div 并执行相同操作直到最后。然后它必须返回到第一个div。这是我的代码:

<div class="code_div">
    <div class="code_area">
        <p id="number1">00</p>
    </div>
    <div class="code_area2">
        <p id="number2">00</p>
    </div>
    <div class="code_area3">
        <p id="number3">00</p>
    </div>
    <div class="code_area4">
        <p id="number4">00</p>
    </div>
var value = 0;
var plus = false;
var minus = false;

$(document).ready(function() {
    $('#set_next').click(function() {
    });

    $('#minus').click(function() {
        minus = false;
        plus = true;
        if (plus == true) {
            value -= 5;
        }
        displayValue()
    });

    $('#plus').click(function() {
        minus = true;
        plus = false;
        if (minus == true) {
            value += 5;
        }
        displayValue() 
    });
});

function displayValue() {
    document.getElementById("number1").innerHTML = value;
}

谁能帮帮我?

【问题讨论】:

  • 加号和减号按钮在哪里?你能提供一个jsFiddle
  • 对不起,他们在那里......我试着快速创建一个 js fiddle
  • 我不知道为什么我的加号和减号在 jsfiddle 上不起作用,但在我的机器上却可以正常工作

标签: javascript jquery html css


【解决方案1】:

保持简单。您有一个 div 列表,因此请改用 list。即使您想保留原始标记,这也应该提供有关如何实现它的想法。

var $items = $('ul li'),
    qtItems = $items.length,
    activeItem = 0;

$('#setnext').click(function () {
  $items.removeClass('active').eq(++activeItem % qtItems).addClass('active');
});
                   
$('#plus, #minus').click(function () {
  var currvalue = $items.eq(activeItem % qtItems).text();
  this.id === 'plus' ? currvalue++ : currvalue--;
  $items.eq(activeItem % qtItems).text(currvalue);
});
ul {
  list-style: none;
}

ul li {
  display: inline-block;
  margin: 0 1em;
  padding: 1em;
  background-color: green;
  opacity: .5;
}

li.active {
  opacity: 1;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li class="active">0</li>
  <li>0</li>
  <li>0</li>
  <li>0</li>
</ul>

<button id="setnext">set next</button>
<button id="plus">plus</button>
<button id="minus">minus</button>

但是,如果您不能简化您的标记,这里有另一个simple solution 使用您的原始 html。
如您所见,您不需要所有这些类和 ID。

【讨论】:

  • 真正优雅的部分是.eq(++activeItem % qtItems),这是一种跟踪焦点元素的好方法。干得好。
【解决方案2】:
var value = 0;
var plus = false;
var minus = false;
var index=1;
$( document ).ready(function() {

$('#set_next').click(function() {
index++;
//update
$("#number"+index).css("color","blue");
if(index==5){
index=1;
}
});

 $('#minus').click(function() {
       minus = false;
       plus = true;
        if (plus == true){
        value -= 5;
    }
displayValue()
    });

 $('#plus').click(function() {
       minus = true;
       plus = false;
    if (minus == true){
         value += 5;
    }
displayValue() 
    });
});

function displayValue(){
        document.getElementById("number"+index).innerHTML = value;
}

【讨论】:

  • 是的,这行得通,我一直在尝试用 .next 做其他事情,我想我自己把它弄复杂了……但这是 100% 的。十分感谢你的帮助。现在我下次就可以了..
  • 你将如何突出显示被选中的那个,只是让字体颜色变成蓝色
  • @JulianFaul 不客气,伙计,请检查单击功能中的更新,您可以使用 jquery 实现这一点
【解决方案3】:

虽然您的代码需要大量润色(如果您愿意,我可以为您提供更简洁的方法) https://jsfiddle.net/cbw4zc55/ 这些方面的东西? html代码:

<div class="code_div">
<div class="code_area">
<p id="number1">00</p>
</div>
<div class="code_area2">
<p id="number2">00</p>
</div>
<div class="code_area3">
<p id="number3">00</p>
</div>
<div class="code_area4">
<p id="number4">00</p>
</div>
    <button id="set_next">set next</button>
    <button id="minus">minus</button>
    <button id="plus">plus</button>

javascript:

var current = 1;
    var max = 4;

    var value = 0;
    var plus = false;
    var minus = false;
    $( document ).ready(function() {

    $('#set_next').click(function() {
        if( current < max )
        {
            current+=1;
        }
        else
        {
            current = 1;
        }
     value = parseInt($("#number"+current).text());
    });

     $('#minus').click(function() {

           minus = false;
           plus = true;
            if (plus == true){
            value -= 5;
        }

    displayValue()

        });


     $('#plus').click(function() {

           minus = true;
           plus = false;
        if (minus == true){
             value += 5;
        }
    displayValue() 

        });

    });


    function displayValue(){

            document.getElementById("number"+current).innerHTML = value;

    }

编辑: 请注意,每次将焦点更改为新元素时,都需要重新计算当前元素值(除了所选答案也很完美)

【讨论】:

  • 这太棒了.. 我还是新手,所以我不明白 100% 发生了什么.. 生病去查找解析 int.. 还有你会如何改变活跃数字的颜色? ?我会尝试将 css 添加到('set_next')单击功能添加和删除类 .active 与属性(颜色:蓝色)。
  • 如果你能指出我正确的方向,我会自己弄清楚
  • $("#number"+current).closest("div").toggleClass("myactiveclass");从当前元素中获取最接近的 div (您可以说所有元素的 code_area 类而不是 code_area1 等并执行 .closest(".code_area") 如果存在,则 toggleClass 将删除一个类,如果不存在则添加,所以在更改当前元素之前和之后调用 set_next 上的切换类,以从以前的元素中删除类并添加到当前元素。然后将 css 添加到类中,您就完成了:)
  • 这样,您将向包装元素添加一个类,这将允许您对其进行相应的样式设置。如果您希望定位实际元素,请跳过 .closest 部分
  • 非常感谢您的帮助.. 也感谢所有帮助 aswel 的人
猜你喜欢
  • 2011-08-31
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
相关资源
最近更新 更多