jQuery keyup事件无法获取正确的值

时间:2015-08-01 09:47:46

标签: javascript jquery

我有一个动态生成的HTML表单。表单包含输入字段和隐藏的输入字段。因此,它动态生成的次数取决于用户。输入字段的ID和名称也是动态设置的。当用户在输入框中输入内容时,我依赖类来从输入字段中获取值。

这是我的html表单的静态代码

<div id="choose_subjects_div2" class="form-group" >
   <div class="col-md-6">
      <input type="hidden" class="form-control onesubject" id="subj_1" name="subj_1" value="8">
      <input type="number" class="form-control onetotal" id="tot_1" name="tot_1">
   </div>
   <p></p>
   <div class="col-md-6">
      <input type="hidden" class="form-control onesubject" id="subj_2" name="subj_1" value="5">
      <input type="number" class="form-control onetotal" id="tot_2" name="tot_1" ">
   </div>
   <p></p>
</div>

我希望输入字段的值和与之关联的隐藏字段执行一些数据库操作。

这是我正在使用的jQuery。

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
  clearTimeout (timer);
  timer = setTimeout(callback, ms);
 };
})();

$('.onetotal').keyup(function() {
  delay(function(){
      var xxx=$('.onetotal').val();
      var hiddenx = $('.onetotal').siblings('.onesubject').attr('value');
    alert(xxx +'and' +hiddenx );
  }, 1000 );
});

keyup事件在延迟1秒后起作用。

错误地获取值。这是fiddle

2 个答案:

答案 0 :(得分:1)

您需要从触发相同输入键盘获取值,因此您需要在$(this)函数内使用$('.onetotal')而不是delay

$('.onetotal').keyup(function () {
    delay(function () {
        var xxx = $(this).val();
        var hiddenx = $(this).siblings('.onesubject').val();
        alert(xxx + ' and ' + hiddenx);
    }.bind(this), 1000);
});

演示: http://jsfiddle.net/b2d9859t/1/

答案 1 :(得分:0)

每次选择所有隐藏的输入时,val()都会返回第一个隐藏输入的值。您应该使用thisevent.target来获取当前输入及其邻居。

$('.onetotal').keyup(function(event) {
   var $current = $(this)
   delay(function(){
       var xxx=$current.val(),
           hiddenx = $current.siblings('.onesubject').attr('value');
       alert(xxx +'and' +hiddenx );
 }, 1000 );

});