调用输入文本更改事件时,Drupal进入循环

时间:2014-07-16 16:05:23

标签: javascript jquery drupal drupal-7

我正在使用Drupal 7,问题是我有一个输入类型文本,默认情况下,带有2个箭头的产品数量(添加购物车按钮的小部件数量)。

使用js_injector模块获取' change()'输入的事件,奇怪的事情发生,循环开始根据点击的箭头或多或​​少地改变输入的值。

    jQuery(function($) {
        $(document).ready(function(){
              $('#edit-quantity').bind('change keydown keyup click input submit mouseenter', function (e) {alert('Type: ' + e.type); });

        });
      });

- >这项工作正常,但没有获得箭头跨度点击选项:

     $('#edit-quantity').bind('keydown keyup click input submit mouseenter',...

- >这些选项会创建一个循环:

     $('#edit-quantity').bind('change ...',

OR

     $('#edit-quantity').change(function (e) {alert('Type: ' + e.type); });

我的观点是,为什么这个.change()事件会创建这样一个循环?或者更好的我如何阻止它使用该事件?

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以使用"输入"而不是改变

$('#textbox').on('input', function() {
    // do your stuff
});

最好不要在文本字段上使用更改。单选按钮,选择字段,复选框等更改首选...

答案 1 :(得分:0)

希望它可以帮助某人,最后我只是寻找所有变化的可能性。不仅在输入中还有用span表示的'按钮'。我做了一些小技巧,结果是这样的:

    jQuery(function($) {
    function value()
    {
       if($(this).index()!=0) //Just execute once
       {
               var price=parseFloat(document.getElementsByClassName('field-item')[0].innerHTML.replace(' €','')).toFixed(2);
               var quantity = parseFloat($("#edit-quantity").val());
               price *= quantity;
               var glbvar = price.toFixed(2).replace('.',',')+' €';

       //Set Price
               document.getElementsByClassName('field-name-commerce-price')[0].getElementsByClassName('field-item')[0].innerHTML = glbvar ;
       }
    }

      $(document).ready(function(){
       //When refreshing the value get lost:
            if( parseFloat($("#edit-quantity").val()) != 1)  value();


    /*For input*/ $("#edit-quantity").bind("propertychange keyup paste input",value);
    /*For span*/  $('span').bind('click',value);

       });
     });