2013-02-21 1 views
1
function Todo(id, task, who, dueDate) { 
    this.id = id; 
    this.task = task; 
    this.who = who; 
    this.dueDate = dueDate; 
    this.done = false; 
} 


function updateDone(e) { 
     var spanClicked = e.target; 
     var id = spanClicked.parentElement.id; 
     spanClicked.innerHTML = " ✔ "; 
     spanClicked.setAttribute("class", "done"); 
     console.log("you clicked this span" + id); 


     for(var i = 0; i < todos.length; i++) { 
     if (todos[i].id == id) { 
      var mark = todos[i]; 
      mark.setAttribute("class", "done"); 
      console.log(mark); 
      break; 
      } 
      } 
    } 

Первая часть этой функции обновляет веб-страницу, чтобы показать, что объект «сделан». Во второй части есть проблемы. Я пытаюсь обновить объект как «сделанный» внутри массива. Идея состояла в том, чтобы сопоставить идентификатор того, что пользователь нажимает на id в массиве, а затем устанавливает его как «done» с помощью setAttribute. Однако сообщение консоли, которое я получаю для console.log (mark), является mark.setAttribute, не является функцией. Любые предложения о том, как я могу изменить это, чтобы я мог обновить объект в массиве как «сделан»?проблема с наборомAttribute

+0

Если вы пытаетесь изменить класс, используйте 'element.className = "сделано"'. –

+2

Вы могли бы показать, как заполняется «todos»? это массив элементов или просто идентификаторов? – hexblot

+0

спасибо, что добавляет еще один класс «done», но он не меняет того, который уже существует. – user2084813

ответ

0
for(var i = 0; i < todos.length; i++) { 
    if (todos[i].id == id) { 
     var element = document.getElementById(todos[i].id); 
     element.setAttribute("class", "done"); 
     console.log(element); 
     break; 
    } 
} 

или если «метка» в вашем примере не является объектом DOM, то вы бы просто установить это сделано свойство верно.

for(var i = 0; i < todos.length; i++) { 
    if (todos[i].id == id) { 
     todos[i].done = true; 
     console.log(todos[i]); 
     break; 
    } 
} 
0

Установка класса с setAttribute - отличная идея.

//Works with FF and Chrome 
obj.setAttribute("class", "done"); 

//works with IE 
obj.setAttribute("className", "done"); 

//works with all browsers 
obj.className = "done"; 
0

Hey @ user2084813 Я знаю, что это будет немного переборщить, но это будет полезно в долгосрочной перспективе. JQuery имеет функции, которые работают с перекрестным браузером (никогда не проверяйте проверку), что позволяет вам проверять/добавлять/удалять классы. IE обычно обрабатывает удаление по-разному.

http://api.jquery.com/hasClass/

http://api.jquery.com/addClass/

http://api.jquery.com/removeClass/