Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Подскажите с кодом (https://javascript.ru/forum/css-html/55043-podskazhite-s-kodom.html)

Karen8 11.04.2015 15:09

Подскажите с кодом
 
Всем доброго дня!
Есть код который плюсует/отнимает цифры в инпуте.
var wrapper = document.querySelector('wr');
var countInput = document.getElementById('count');
var butM = document.getElementById('bminus');
var butP = document.getElementById('bplus');
var units = countInput.value.replace(/\d/g, '');
butP.onclick = function(){
    countInput.value = parseInt(countInput.value)+1+units;
};
butM.onclick = function(){
    if(parseInt(countInput.value) > 1) {
        countInput.value = parseInt(countInput.value)-1+units;
    }
};

Вот html
<div class="wr">
    <div>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
    </div>
</div>


демо http://jsfiddle.net/ump6oL6y/13/

Проблема в том что, все это работает только на первом импуте, а на остальных нет, как бы поправить?

theKingOfJava 11.04.2015 20:04

А не проще сгенерить эти элементы?
<html>
<head>
<meta charset="windows-1251" />

<style>
#wr {
    margin: 50px;
    position: relative;
    border: 2px solid #06c106;
    padding: 5px 10px;
    width: 130px;
    overflow: hidden;
    
}
#wr input {
    display: block;
    padding: 8px;
    width: 50px;
    text-align: center;
    border: 2px solid #c00;
    outline: none;
    float: left;
}
.minus,
.plus {
    float: left;
    display: block;
    font-size: 26px;
    padding: 5px 8px;
    font-weight: bolder;
    cursor: pointer;
    color: #d00;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}
</style>

</head>
<body>


<div id="wr"></div>


<script>

create=function(){
 var minus=document.createElement("span")
  minus.className="minus"
  minus.innerHTML="-"
  minus.onclick=function(){var iv=input.value; input.value=parseInt(iv)==0? iv : iv.replace(/\d+/, function(n){return +n-1})}
  wr.appendChild(minus)
 var input=document.createElement("input")
  input.value="1 шт"
  wr.appendChild(input)
 var plus=document.createElement("span")
  plus.innerHTML="+" 
  plus.className="plus"
  plus.onclick=function(){input.value=input.value.replace(/\d+/, function(n){return +n+1})}
  wr.appendChild(plus)
}

create()
create()
create()
create()



</script>

</body>
</html>

Karen8 11.04.2015 20:20

нет, список генерируется php кодом из базы, там их много, поэтому надо чтобы существующие обрабатывались. а так не получается?

theKingOfJava 11.04.2015 21:01

<html>
<head>
<meta charset="windows-1251" />
<style>

.wr {
    margin: 50px;
    position: relative;
    border: 2px solid #06c106;
    padding: 5px 10px;
    width: 130px;
    overflow: hidden;
    
}
.wr input {
    display: block;
    padding: 8px;
    width: 50px;
    text-align: center;
    border: 2px solid #c00;
    outline: none;
    float: left;
}
#bminus,
#bplus {
    float: left;
    display: block;
    font-size: 26px;
    padding: 5px 8px;
    font-weight: bolder;
    cursor: pointer;
    color: #d00;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

</style>
</head>
<body>


<div class="wr">
    <div>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
        <span id="bminus">–</span><input type="text" id="count" value="1 шт" /><span id="bplus">+</span>
    </div>
</div>

<script>

get=function(s){return document.querySelector(".wr").querySelectorAll(s)}
minuses=get("#bminus")
pluses=get("#bplus")
inputs=get("#count")

setMinus=function(el){return function(){
 var iv=el.value; el.value=parseInt(iv)==0? iv : iv.replace(/\d+/, function(n){return +n-1})
}}
setPlus=function(el){return function(){
 el.value=el.value.replace(/\d+/, function(n){return +n+1})
}}


for(var i=0; i<minuses.length; i++){
 minuses[i].onclick=setMinus(inputs[i])
 pluses[i].onclick=setPlus(inputs[i])
}

</script>


</body>
</html>


Часовой пояс GMT +3, время: 04:59.