当用户移动到下一个输入字段或释放输入字段时触发事件

时间:2017-12-27 12:10:11

标签: javascript php jquery

此代码位于php的foreach循环中

$('input[name="<?=$value?>"]').on('change',function(){
        spanval = $(".formscore").text();
        width = $(".formProgressbar").width() / $('.formProgressbar').parent().width() * 100;
        width = Math.round(width);
        var currentval = $(this).val();
        if(currentval != ''){
          $(".formscore").text(parseInt(spanval) + <?=$sql123->score?> + '%' )
          $(".formProgressbar").width(parseInt(width) +  <?=$sql123->score?> + '%' )
        }else{
          $(".formscore").text(parseInt(spanval) - <?=$sql123->score?> + '%' )
          $(".formProgressbar").width(parseInt(width) -  <?=$sql123->score?> + '%' )
        }
      });

此代码会在输入字段更改时更改进度条。

现在的问题是每次更改字段时都会更改

我尝试了关注jquery的处理程序

  1. 变化
  2. 模糊
  3. KEYUP
  4. KEYDOWN
  5. 事件的内容/在
  6. 我希望在用户移动到下一个输入字段或释放输入字段时触发事件。我对任何其他建议持开放态度。

3 个答案:

答案 0 :(得分:1)

如果您尝试将事件侦听器添加到动态生成的元素,而不是

$('input').on(event, function(e){
  // won't work for dynamically generated element
});

你应该使用下一个代码:

$('form').on(event, 'input', function(e){
  // will work for dynamically generated element
});

此代码适用于下一个html:

<form>
  <input type="text" name="">
</form>

input是动态生成的元素,event是您的事件(changeblur等。)

答案 1 :(得分:0)

$('input[name="<?=$value?>"]').on('blur',function(e){
  //Do something
});

答案 2 :(得分:0)

当用户触发模糊事件时,您可能应该在输入中添加一个类。然后使用此类来阻止事件的下一个触发器。

(您也可以使用jQuery的.data () method而不是类)

或者更好的是,使用由模糊事件触发的每个循环来计算所有填充的输入,以增加或减少进度条。

请参阅JS fiddle example

var total = $('input').length
$('input').on('blur', function() {
  var counter = 0;
  $('input').each(function() {
    if($(this).val()) {
    counter += 1;
    }

  })
  console.log('Progress : '+counter+'/'+total+'. Percent : ' + (counter*100/total)+ '%')
})