2017-10-17 2 views
0

J'essaye de pousser un texte d'élément enfants vers mon rappel d'objet en le passant à la nouvelle méthode de rappel, mais il n'appuie pas sur chaque élément du texte qu'il vient de remplacer.Pousser de nouveaux objets remplace l'objet précédent

$(document).on('click', '.save-reminder-button', function() { 
    var value = $(this).siblings('input').val(); //get the value of input 
    var title = $(this).siblings('h1').text(value); //set the h1 
    var saveSetName = $(this).parent().siblings().children('input').val(); 
    var elem = $(this).parent().parent().children(".reminder-lists").children(); //get the reminder-lists children 
    $(elem).each(function(i, e) { 
     var txt = $(e).text(); //set txt to the elem text node 
     saveSetName = new ReminderSet(saveSetName) 
      .add(new Reminder(txt)) //create new reminder to push to reminders array 

    }); 

}) 



var ReminderSet = function(name) { 
    this.name = name; 
    this.reminders = []; 
} 

ReminderSet.prototype.add = function(reminder) { 
    this.reminders.push(reminder); 
    console.log(this.name, this.reminders); 
    return this; 
} 

ReminderSet.prototype.list = function() { 
    console.log(this.reminders); 
} 

var Reminder = function(description) { 
    this.description = description; 
} 
+0

'new ReminderSet' qui crée un nouvel objet avec un tableau vide. Vous devez enregistrer votre original et l'utiliser. – Will

Répondre

0

Dans votre code, vous créez un objet ReminderSet pour chaque élément poussant. Créez l'objet une fois. Comme cela,

$(document).on('click', '.save-reminder-button', function() { 
    var value = $(this).siblings('input').val(); //get the value of input 
    var title = $(this).siblings('h1').text(value); //set the h1 
    var saveSetName = $(this).parent().siblings().children('input').val(); 
    var elem = $(this).parent().parent().children(".reminder-lists").children(); //get the reminder-lists children 
    saveSetName = new ReminderSet(saveSetName); 
    $(elem).each(function(i, e) { 
     var txt = $(e).text(); //set txt to the elem text node 
     saveSetName.add(new Reminder(txt)) //create new reminder to push to reminders array 

    }); 

}) 
0

Avec cette ligne:

saveSetName = new ReminderSet(saveSetName) 
     .add(new Reminder(txt)) 

Vous êtes juste remplacer la valeur de l'objet ancien avec cette nouvelle valeur, pour que cela fonctionne comme vous le voulez, vous avez de déclarer une nouvelle variable, en dehors de la boucle for:

var reminderSet = new ReminderSet(saveSetName); 

Et une fois que vous êtes à l'intérieur de votre boucle, vous pouvez alors ajouter vos rappels:

$(elem).each(function(i, e) { 
    var txt = $(e).text(); //set txt to the elem text node 
    reminderSet.add(new Reminder(txt)) 
});