【问题标题】:Fire an event when user move to next input field or release input field当用户移动到下一个输入字段或释放输入字段时触发事件
【发布时间】:2017-12-27 12:10:10
【问题描述】:

这段代码在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. 键位
  4. 按键
  5. 聚焦/聚焦

我想在用户移动到下一个输入字段或释放输入字段时触发一个事件。我愿意接受任何其他建议。

【问题讨论】:

  • 你去 jquery onblur 事件

标签: javascript php jquery


【解决方案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 等)

【讨论】:

  • 这与我的问题无关。但作为建议打电话。
  • @MadCoder,你可以尝试在$('form').on(event, 'input[name="&lt;?=$value?&gt;']', function(e){ ... });中使用'input[name="&lt;?=$value?&gt;"]'作为选择器
【解决方案2】:
$('input[name="<?=$value?>"]').on('blur',function(e){
  //Do something
});

【讨论】:

  • 如果值已经被填充并且我改变它,它仍然会增加值。
  • 移除变更处理程序
  • 我复制你的代码如果值已经被填充并且我改变它,它仍然会增加。
  • 虽然这可能会提供问题的答案,但需要一些解释。请更新问题,解释此解决方案的工作原理和原因。
【解决方案3】:

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

(你也可以使用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)+ '%')
})

【讨论】:

猜你喜欢
  • 2020-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多