2017-09-25 1 views
1

J'ai un script qui boucle dans ma grille de kendo lorsqu'un ID d'article est soumis, ce script ajoute +1 à la quantité lorsqu'une correspondance est trouvée. Une fois qu'une correspondance est trouvée, je veux que mon script arrête de boucler puisque le même article-id peut avoir plus d'une ligne dans la grille et l'idée est d'ajouter seulement +1 au premier match. Je sais qu'une boucle foreach ne peut pas contenir de break; et l'utilisation d'une boucle for ne semble pas fonctionner pour les datarows kendo-grid. Actuellement, le code ajoute +1 à chaque ligne correspondante. Est-ce que quelqu'un sait comment je peux accomplir cela?Comment arrêter de boucler en cas de succès

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

Ne pas utiliser jQuery 'each', juste faire une boucle' for' simple et sortie quand vous avez besoin. – DavidG

+0

vous pouvez abandonner un jQuery 'each' en retournant' false'. Ou vous utilisez [Array # find] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) pour obtenir l'élément correct: 'var item = allData.find (item => item.ArticleCode === code && item.CollectedQuantity Thomas

Répondre

4

Une return false; simple une fois que le match a été trouvé devrait faire l'affaire.

+0

Cela a fait le tour des acclamations. – Alim

+0

génial, heureux je pourrais aider! –

4

Utilisez return false est une façon officielle de sortir de each() boucles tôt.

+0

Ceci est une caractéristique de la boucle 'each()' de jQuerys et ne s'applique pas aux méthodes Array natives. Juste pour clarifier. – Thomas

0

vous pouvez utiliser une fonction et revenir quand si est vrai:

$('#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*/ 
     } 
     } 
    }) 
}