2017-05-23 5 views
0

versuchen, ein Array von model.data in catListView.render() aufzurufen, es zeigt perfekt, aber wie das Array-Element anklickbar, (d. H. Cat0 ist angeklickt oder cat2 ist click).Get click array item

$(function() { 
var model = { 
    data: ["cat0", "cat1", "cat2", "cat3"], 
} 

var oct = { 
    init: function() { 
     catList.init(); 
    }, 
    getCat: function() { 
     return model.data; 
    }, 
}; 

var catListView = { 
    init: function() { 
     this.$catList = $("#cat-list"); 
     catList.render(); 
    }, 
    render: function() { 
     var catList = this.$catList.html(''); 

     var cats = oct.getCat(); 

     for (var i = 0; i < cats.length; i++) { 
      var cat = cats[i]; 

      var li = "<li>" + cat + "</li>"; 
      addEventListener(li, "click", function(){      
       console.log(this.li.text()); 
      }); 
      catList.append(li); 
     } 
    } 
}; 

oct.init(); 
}()); 
+1

li.addEventListener versuchen ('Klick', function() { console.log (this.li.text()); }); –

+0

dies bereits versucht, diesen Fehler bekommen "Uncaught TypeError: li.addEventListener ist keine Funktion" – faisal

+0

var li = "

  • " + cat + "
  • "; –

    Antwort

    1

    Sie sollten eine eventlistener zum Eventtarget mit EventTarget.addEventListener() binden, wenn reinem DOM (https://developer.mozilla.org/de/docs/Web/API/EventTarget/addEventListener als Referenz sehen).

    in Ihrem Code So wäre es:

    var li = document.createElement('li'); // create an element instead if string 
    
    li.innerText = cat; 
    
    li.addEventListener("click", function(){      
        console.log(li.innerText); 
    }); 
    

    Beachten Sie, dass Sie auch ein DOM-Element erstellen müssen Ereignisse zu binden.

    +0

    logisch sollte es nach Ihrer Lösung getan werden, und dies bereits versucht, aber bekommen diesen Fehler erhalten diesen Fehler ** "Uncaught TypeError: li.addEventListener ist keine Funktion" ** – faisal

    +0

    Edit; war zu schnell. Sie können nicht an Zeichenfolgen binden, sollten jedoch an DOM-Elemente binden. Also kreiere einfach ein Element. Sie können die li dann mit dem jQuery-Append oder den reinen DOM-Methoden in das DOM einfügen. – Severin

    +0

    Ja, ich finde die Lösung in reinem JS, aber ich versuche dies in JQuery zu tun. und damm, es gibt mir Kopfschmerzen, könnte ich vermisse sehr kleine Sache, Array-Wert ist holen und zeigen es in li und es funktioniert gut, aber wie genau binden jedes Element mit seinen eigenen macht mich Schmerzen – faisal

    0

    Die Codes eingegeben Sie können nicht laufen ... Ich versuche zu erraten, was Sie wollen-

    $li.bind("click", function() { 
        console.log("way 2", $(this).index()); 
    }); 
    

    https://codepen.io/linjiyeah/pen/QvzVQN

    +0

    Uncaught TypeError: li.bind ist keine Funktion :( – faisal

    +0

    Es gibt einige Unterschiede zwischen DOM und Jquery-Objekt ... Sie können ein Jquery-Objekt wie den folgenden Code erstellen. var li = $ ("

  • " + cat + "
  • "); – LinJI