2013-10-25 3 views
4

Привет я творю входной номер инкремент с помощью JQuery, но никакого успеха еще не пожалуйста, вы можете проверить свой код и дайте мне надлежащего руководстваувеличить количество, используя плюс и минус с JQuery не работает

SEE THE DEMO HERE

HTML

<div class="sp-quantity"> 
    <div class="sp-minus fff"> <a class="ddd" href="#">-</a></div> 
    <div class="sp-input"> 
     <input type="text" class="quntity-input" value="1"> 
    </div> 
    <div class="sp-plus fff"> <a class="ddd" href="#">+</a></div> 
</div> 

JS

$(".ddd").on("click", function() { 

    var $button = $(this); 
    var oldValue = $button.parent().find("input .quntity-input").val(); 

    if ($button.text() == "+") { 
     var newVal = parseFloat(oldValue) + 1; 
    } else { 
     // Don't allow decrementing below zero 
     if (oldValue > 0) { 
      var newVal = parseFloat(oldValue) - 1; 
     } else { 
      newVal = 0; 
     } 
    } 

    $button.parent().find("input .quntity-input").val(newVal); 

}); 

ответ

9

Селектор для поиска ввод был неправильным. .quntity-input является дочерним элементом .sp-quantity, который находится на двух уровнях над кнопкой в ​​DOM, поэтому вам нужно использовать closest() с селектором, а не parent. Попробуйте это:

$(".ddd").on("click", function() { 

    var $button = $(this); 
    var oldValue = $button.closest('.sp-quantity').find("input.quntity-input").val(); 

    if ($button.text() == "+") { 
     var newVal = parseFloat(oldValue) + 1; 
    } else { 
     // Don't allow decrementing below zero 
     if (oldValue > 0) { 
      var newVal = parseFloat(oldValue) - 1; 
     } else { 
      newVal = 0; 
     } 
    } 

    $button.closest('.sp-quantity').find("input.quntity-input").val(newVal); 

}); 

Example fiddle

Вы также можете упростить код:

$(".ddd").on("click", function() { 
 
    var $button = $(this); 
 
    var $input = $button.closest('.sp-quantity').find("input.quntity-input"); 
 

 
    $input.val(function(i, value) { 
 
    return +value + (1 * +$button.data('multi')); 
 
    }); 
 
});
.sp-quantity div { display: inline; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="sp-quantity"> 
 
    <div class="sp-minus fff"><a class="ddd" href="#" data-multi="-1">-</a></div> 
 
    <div class="sp-input"> 
 
    <input type="text" class="quntity-input" value="1" /> 
 
    </div> 
 
    <div class="sp-plus fff"><a class="ddd" href="#" data-multi="1">+</a></div> 
 
</div>

+0

Большое спасибо, он сработал. –

+0

Ой, я не думал об этом. Еще раз спасибо за ответ и разъяснение. –

+0

@VikasGhodke проблем нет. См. Мое обновление о том, как сократить код, используя атрибуты data. –

3

Ваш селектор для входа должен быть

$button.closest('.sp-quantity').find("input.quntity-input") 

Демо: Fiddle

+0

Спасибо за ваш ответ, но без успеха еще .. увидеть эту скрипку http://jsfiddle.net/sGqgD/2/ –

+0

@VikasGhodke см http://jsfiddle.net/arunpjohny/ Ng7B2/1/ –

+1

Wow благодарит много брата .. Это сработало. –

1

Это то, что вы имеете в виду?

Fiddle here

$('.sp-plus').on('click', function(){ 
     var oldVal = $('input').val(); 
     var newVal = (parseInt($('input').val(),10) +1); 
     $('input').val(newVal); 
    }); 

    $('.sp-minus').on('click', function(){ 
     var oldVal = $('input').val(); 
     if (oldVal > 0) 
     { 
      var newVal = (parseInt($('input').val(),10) -1); 
     } 
     else 
     { 
      newVal = 0; 
     } 
     var newVal = (parseInt($('input').val(),10) -1); 
     $('input').val(newVal); 
    }); 
+0

Приятный, я пытался решить это с последних 30 минут и подумал о том, чтобы спросить его о переполнении стека и получил большой ответ, +1 для вас тоже. –

+0

Спасибо @VikasGhodke :) Я только что обновил это, так как изначально я забыл инструкцию 'if'. – Albzi

Смежные вопросы