2016-04-07 37 views
0

我在这里有一段代码。我相当新的Javascript,我的生活中,我无法弄清楚这一点。那么会发生什么呢,代码的底部会拉入数据并将其放入表格中。我想要做的是当我点击最后一列中的按钮时,它将item.ReviewId并自动填充模式中的隐藏输入以匹配该人正在审阅的项目。任何帮助,将不胜感激。当我点击它时,它会自动填充列表中的最后一个数字。例如,如果有3项,20,21,22和我点击第一个,并与22使用数据中的值填充隐藏的输入

var success = function (result) {   

     $.each(result.Items, function (index, item) {    

      $('#reviewresults').dataTable().fnAddData([razorHelpers.formatDate(item.DateVisited), item.clientProfile.CompanyName, razorHelpers.formatCurrency(item.AmountSpent), item.ReviewId, '<button class="btn btn-blue" data-toggle="modal" data-target="#myModal" title="View" id="review">Review This Transaction <i class="fa fa-thumbs-up"></i></button>']); 

      console.log(item.ReviewId) 

      $("#review").on("click", function() { 
       test(item.ReviewId) 
      }); 

      function test(number) { 
       $("#reviewinput").val(number); 
      } 

     }); 

    };  

    ClientOpenReviewService.ListReviewsByConsumer(razorStorage.ExtractSessionData('userId'), 0, 0).done(success); 
+3

您可能想要在'$ .each'之外定义'test'函数。 –

+0

你可以展示jsfiddle吗? –

+0

你总是得到最后一个的原因是你有'each'语句。最后一项将始终设置隐藏输入的值。是否有一个原因,你必须循环而不是使用正确的'item'? –

回答

0

填充并没有真正理解你的代码,我要去尝试它改写到最好的我的知识:

function test(number) { 
    $("#reviewinput").val(number); 
} 

var success = function (result) { 
    $.each(result.Items, function(index, item) { 
    $('#reviewresults').dataTable().fnAddData(
     [razorHelpers.formatDate(item.DateVisited), 
     item.clientProfile.CompanyName, 
     razorHelpers.formatCurrency(item.AmountSpent), 
     item.ReviewId, 
     '<button data-review="'+item.ReviewId+'" class="btn btn-blue review" data-toggle="modal" data-target="#myModal" title="View" id="review-'+item.ReviewId+'">Review This Transaction <i class="fa fa-thumbs-up"></i></button>' 
     ] 
    ); 

    console.log(item.ReviewId) 
    }); 
}; 

$(document).ready(function() { 
    ClientOpenReviewService.ListReviewsByConsumer(razorStorage.ExtractSessionData('userId'), 0, 0).done(success); 

    $(".review").on("click", function() { 
    test($(this).data('review')); 
    }); 
}); 
+0

让我失望的一件事是'item.ReviewId'在.each语句中定义。 –

+0

@JosephNylund我看到了,我将不得不编辑我的答案。但首先,'成功'是获取'item.ReviewId'的值的函数吗? –

+0

是的,我相信。只要我将它移动到'.each'声明之外的任何位置,它就变得不明确了。 –

0

你是通过循环和result.Items在每次迭代要创建一个点击收听

$( “#检讨”)上( “点击”,函数() {})

此监听器正在追加到#review(可能是一个按钮或div)。所以你最终会得到一个#review元素,它有一些附加的监听器。

这大概只能是因为在该#review元素已被点击后,所有的听众都被顺序执行的最后元素。

为了说明我写了这个。

<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> 
</head> 
<body> 

<div id="review"> 
OK 

</div> 

<script> 

    result = {}; 
    result.Items = [ 
     { 
      ReviewId:1 
     }, 
     { 
      ReviewId:2 
     }, 
     { 
      ReviewId:3 
     }, 
     { 
      ReviewId:4 
     }]; 


    $.each(result.Items, function (index, item) { 

     $("div").on("click", function() { 

      test(item.ReviewId) 
     }); 

     function test(number) { 

      alert(number) 

      $("#reviewinput").val(number); 
     } 
    }); 

</script> 

</body> 
</html> 

您可以看到click事件如何创建4个警报框,最后一个警报框是数组中的最后一个数字。

我想你想要的是一些元素#review_1#review_2等你的不同列。你需要重新考虑我的想法。

相关问题