2013-03-10 3 views
0

Мне нужно установить атрибут узла, который я создал через Javascript. Однако это становится довольно сложным из-за того, где значения находятся в разных функциях по всему сценарию.добавить специальный атрибут динамически созданного узла javascript

У меня есть функция-конструктор:

function Todo(id, task, who, dueDate) { 
    this.id = id; 
    this.task = task; 
    this.who = who; 
    this.dueDate = dueDate; 
    this.done = false; 
} 

Затем я создаю пролетные элементы, которые крепят ToDos:

function createNewTodo(todoItem) { 
    var li = document.createElement("li"); 
    li.setAttribute("id", todoItem.id); 

    var spanTodo = document.createElement("span"); 
    spanTodo.innerHTML = 
     todoItem.who + " needs to " + todoItem.task + " by " + todoItem.dueDate; 
    li.appendChild(spanTodo); 
return li; 
} 

Тогда я получаю значение из формы на странице, которую я использую, чтобы установить, кто , и задача. И дата, но это немного сложнее, поскольку я в конечном итоге беру это значение позже в своем коде, чтобы получить разницу между сегодняшней датой и датой, которую они ввели.

function getFormData() { 
    var task = document.getElementById("task").value; 
    if (checkInputText(task, "Please enter a task")) return; 

    var who = document.getElementById("who").value; 
    if (checkInputText(who, "Please enter a person to do the task")) return; 

    var adate = document.getElementById("dueDate").value; 
    var reString = new RegExp("[0-9]{4}\\-\[0-9]{2}\\-\[0-9]{2}"); 

    var date = compareDates(date); 
    var id = (new Date()).getTime(); 
    var todoItem = new Todo(id, task, who, date); 
    todos.push(todoItem); 
    addTodoToPage(todoItem); 
    saveTodoItem(todoItem); 
} 

Итак, дни - это значение, которое я хочу здесь. Я хочу установить dueDate равными днями, чтобы я мог использовать это значение в innerHTML функции createNewToDo.

function compareDates(date) { 
    var days = Math.floor(daysCal); 
    console.log(date); 
    todoItem.setAttribute("dueDate", days); 
    if (cdate < date) { 
    console.log("you have" + " " + days + " " + "more day(s)"); 
    } 
    else if (cdate > date) { 
    console.log("you are" + " " + -days + " " + "day(s) overdue"); 
    } 
} 

Любые идеи по внесению изменений в значение dueDate для стоимости дней?

ответ

0

Ваш todoItem является объект JS, созданный Todo конструктор, а не DOM узла, как li или spanTodo. Таким образом, он не имеет setAttribute метод, и если вы хотите установить свойство этого просто присвоить ему (с использованием member operator):

todoItem.dueDate = daysL 

 Смежные вопросы

  • Нет связанных вопросов^_^