2017-09-25 37 views
1

我有一個腳本,在提交article-id時通過我的kendo-grid循環,此腳本在找到匹配項時爲數量添加+1。發現匹配後,我希望我的腳本停止循環,因爲相同的article-id在網格中可以有多於一個的行,並且想法僅在第一個匹配中添加+1。我知道一個foreach循環不能包含break;,並且使用for-loop似乎不適用於kendo網格數據行。目前該代碼爲每個匹配行添加+1。有誰知道我能做到這一點?如何停止成功循環

JS:

$('#txtBarcode').submit(function (e) { 
    var grid = $("#GCLinesGrid").data("kendoGrid"); 
    var dataSource = $("#GCLinesGrid").data("kendoGrid").dataSource; 
    var allData = grid.dataSource.data(); 
    var code = this.value; 

    $.each(allData, function (index, item) { 
     if (item.ArticleCode == code) { 
      if (item.CollectedQuantity < item.Quantity) { 
       item.CollectedQuantity++;      
       item.dirty = true; 
       dataSource.sync(); 
      } 
     } 
    }) 
}) 
+1

不要使用jQuery'each',只是做一個簡單的'for'循環和退出,當您需要。 – DavidG

+0

您可以通過返回false來中止jQuery'each'。或者你可以使用[Array#find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find)來獲取正確的項目:'var item = allData.find (item => item.ArticleCode === code && item.CollectedQuantity Thomas

回答

4

簡單return false;一旦發現匹配應該做的伎倆。

+0

這樣做搞砸了。 – Alim

+0

真棒,很高興我可以幫助! –

4

使用return false是正式的方式提前打破each()循環。

+0

這是jQuerys'each()'循環的一個特性,不適用於本地數組方法。只是爲了說清楚。 – Thomas

0

你可以使用一個功能,並且如果是真實的返回:

$('#txtBarcode').submit(function (e) { 
    var grid = $("#GCLinesGrid").data("kendoGrid"); 
    var dataSource = $("#GCLinesGrid").data("kendoGrid").dataSource; 
    var allData = grid.dataSource.data(); 
    var code = this.value; 
    loop(/*args here*/) 
}) 

function loop (/*args you need here*/) { 
    $.each(allData, function (item, index) {/*fix forEach*/ 
     if (item.ArticleCode == code) { 
     if (item.CollectedQuantity < item.Quantity) { 
      item.CollectedQuantity++;      
      item.dirty = true; 
      dataSource.sync(); 
      return false; /*or return some value you need*/ 
     } 
     } 
    }) 
}