为什么我的jQuery在这里工作但不在那里?

时间:2017-09-20 23:32:56

标签: javascript jquery

纽布在这里。我一直在阅读关于事件传播的内容,我认为它可能与此有关,但是尽管我尝试并尽可能多地搜索,但我无法解决这个问题。为什么我的jquery工作/不工作如下所示?似乎for循环是某种方式的罪魁祸首,但为什么我的数据在其中不可见?我是新手,非常感谢你的帮助!非常感谢你的帮助!

 $.ajax({
 url: RestUrlTwo,
 method: "GET",
 headers: {
 "accept": "application/json;odata=verbose",
 },
 success: function(dataTwo) {
 if (data.d.results.length > 0) {
 $('#CustomerGrid').append(GenerateTableFromJson(data.d.results,dataTwo.d.results,dataThree.d.results));

 var oTable = $('#AllRequestsTable').dataTable({

initComplete: function() {

    //JQUERY WORKS HERE ******************
    $('input.title').on('input',function(){
        console.log("hi");
    }); 

 }, "iDisplayLength": 100,
 "aLengthMenu": [
 [5, 10, 30, 100],
 [5, 10, 30, 100]
 ],
 "sPaginationType": "full_numbers"
 });
 } 

 }
 });

    $('input.title').on('input',function(){
        console.log("hi");
    });

function GenerateTableFromJson(objArray,objArrayTwo,objArrayThree) {

 var tableContent = '<table summary="GFSTechIntake" id="AllRequestsTable" style="width:100%"><thead><tr><th>Submit Priority</th><th>test</th><th>Your Prev Rank</th><th>Current Overall</th><th>Category</th>' + '<th>Status</th>' +' <th>Request Name</th>' + '<th>Problem Statement</th>' + '<th>Business Benefits</th><th>Dept(s)</th></tr></thead><tbody>';
  var num = [];
 for (var i = 0; i < objArray.length; i++) {    
    for(var j = 0;j < objArrayTwo.length; j++){
        if(objArray[i].Title == objArrayTwo[j].RequestName){
            rank = objArrayTwo[j].Rank ? objArrayTwo[j].Rank : "";
        } 

    }


    //DOESN'T WORK HERE *************
    $('input.title').on('input',function(){
        console.log("hi");
    }); 

    var title = objArray[i].Title ? objArray[i].Title : "";
    var category = objArray[i].Category ? objArray[i].Category : "";
    var status = objArray[i].Status ? objArray[i].Status : "";

     tableContent += '<tr class="allItemsTr">';
     if(rank != ''){
     tableContent += '<td class="allItemsPriority"><span>rank '+rank+'<input class="title" placeholder=' + rank + ' value='+rank+'></td>';
     } else {
     tableContent += '<td class="allItemsPriority"><input class="title" placeholder=' + rank + '></td>';
     }
     tableContent += '<td class="test"></td>';
     tableContent += '<td class="prevRank">N/A</td>';
     tableContent += '<td class="currentRank">N/A</td>';
     tableContent += '<td class="category">'+category+'</td>';
     tableContent += '<td class="allItemsStatus">' + status + '</td>';
     tableContent += '</tr>';
 } 

 return tableContent;

 }

1 个答案:

答案 0 :(得分:0)

因为您的表格在您遇到问题时尚未创建。

您在var tableContent内设置function GenerateTableFromJson()(并构建表格的内容),但实际上并非添加直到$('#CustomerGrid').append(GenerateTableFromJson)的DOM表。您无法访问$('input.title'),直到该元素位于DOM中。

表已完全初始化后会调用

initComplete ,此时<input class="title>位于DOM中。因此,$('input.title')//JQUERY WORKS HERE)可以在那里访问。

希望这有帮助! :)