javascript - 如何使用 for 循环生成 "x"jQuery 脚本?

标签 javascript jquery

这听起来可能很奇怪,也可能确实如此,所以如果我犯了一个严重的错误,请原谅我。 我有一个未指定的号码 <input type='text'> ,在运行时生成,并使用进度编号 ID 进行标识,如 id='data1' , id='data2' ...我希望每个输入都有一个 jQuery 脚本。我想为 x 输入生成 x 脚本,但它不起作用。

我怎样才能做到这一点?

function addPreparations (nos, pietanze) {
  var numeroTotale = nos.value;
  var box = document.getElementById("box_righe");
  generateScripts(numeroTotale);
  if (numeroTotale == '') {
    box.innerHTML = '';
  }
  else {
    var righe = "<table class='table table-hover'>";
    righe += "<th class='text-center'>Pietanza</th><th class='text-center'>U. di Misura</th><th class='text-center'>Quantità</th><th class='text-center'>Cuoco</th><th class='text-center'>Data di Preparazione</th>";
    for (i = 1; i <= numeroTotale; i++) {
      righe = righe + "<tr><td><select name='pietanza"+i+"' class='form-control' onchange='showMU(this.value, \"p\", "+i+");'>";
      righe = righe + "<option value=''>Selezionare la pietanza "+i+"</option>";
      for (j=0; j<pietanze.length; j++) {
        righe = righe + "<option value='"+pietanze[j]+"'>"+pietanze[j]+"</option>";
      }
      righe = righe + "</select></td>";
      righe = righe + "<td align='center'><p id='umis"+i+"' class='h5'>- - -</p></td>";
      righe = righe + "<td><input type='number' placeholder='Inserire la quantità' name='quantita"+i+"' class='form-control'/></td>";
      righe = righe + "<td><input type='text' placeholder='Inserire il cuoco' name='cuoco"+i+"' class='form-control'/></td>";
      righe = righe + "<td><input type='text' placeholder='GGMMAAAA' id='data"+i+"' class='form-control' name='data"+i+"' /></td></tr>";
    }
    righe = righe + "</table>";

    righe = righe + "<input type='submit' name='storageConfirm' value='Conferma' class='btn btn-success'/>&nbsp&nbsp";
    righe = righe + "<input type='reset' value='Reimposta' class='btn btn-danger'/>";

    box.innerHTML = righe;
  }
}

function generateScripts (total) {
  for (i=1; i<=total; i++) {
    $(document).ready(function() {
      $("body").on('keydown', '#data'+i, function(e) {
        if ((e.keyCode == 8) || (e.keyCode >= 96 && e.keyCode <= 105) || (e.keyCode >= 48 && e.keyCode <= 57)) {
          return;
        }
        else {
          alert("Solo numeri!");
          e.preventDefault();
        }
      });
    });
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最佳答案

使用属性选择器 [] 并以 ^ 选择器 ([id^="data"]) 开头,您的代码应该是:

$(document).ready(function() {
    $("body").on('keydown', '[id^="data"]', function(e) {
        //Your logic HERE
    });
});

或者您可以为所有输入提供一个公共(public)类并将其用作选择器,例如:

$(document).ready(function() {
    $("body").on('keydown', '.common_class', function(e) {
        //Your logic HERE
    });
});

注意:在跟踪用户输入时最好使用 input 事件,例如:

$(document).ready(function() {
    $("body").on('input', '[id^="data"]', function(e) {
        //Your logic HERE
    });
});

希望这有帮助。

关于javascript - 如何使用 for 循环生成 "x"jQuery 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42813472/

相关文章:

javascript - 通过 css 和::focus 进行嵌套选择

jquery - Bootstrap 工具提示在 IE-8 到 IE-11 的页面滚动时未关闭

jQuery .bind(scroll) 函数在 Firefox 中不起作用

javascript - 如何使用 jquery 从 <td> 中获取隐藏值

javascript - 如何将毫秒转换为日期(月份中的某一天)?

javascript - ng2-ckeditor 使用 typescript 和 angular 2.0 添加占位符插件

javascript - jQuery 每个错误 :Uncaught TypeError: Cannot use 'in' operator to search for '18' in div[data-role=page]

javascript - For 循环和 ForEach 循环在 getJSON 中表现出不同的行为

javascript - Angular ui-select 多个干净的 ng-model 值

javascript - 传递 <tr> id 值 javascript 函数