• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Javascript funkcja

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
197 wizyt
pytanie zadane 22 marca 2018 w JavaScript przez Vorex444 Dyskutant (9,610 p.)
edycja 22 marca 2018 przez Vorex444
      deleteNote: function(e) {
          //Id elementu
            var idObject = Number(e.target.parentElement.getAttribute('id'));
            alert(idObject);
          //Porownuje do tablicy
          let arrayPostslength = this.arrayPosts.length;
          for(var i = 0; i < arrayPostslength; i++) {
                if(this.arrayPosts[i].noteId === idObject) {
                    console.log(this.arrayPosts[i]);
                }
                else {
                    return;
                }
          }
      }

Hej, mam taką funkcję i nie mogę zrozumieć dlaczego działa mi tylko na pierwszego diva if i w konsoli wyseitla odpowiedni obiekt, jak klikne 1,2,3 itd. nie działa, tylko ostatni.

Tak wygląda tablica 

arrayPosts: [

{text: 'adasd' .....},

---||---

]

beforeMount() {
      if(localStorage.getItem('posts')) {
          this.arrayPosts = JSON.parse(localStorage.getItem('posts'));
      }
      else {
          return;
      }
  },

Gdy cos było zapisane w LS to wypełni ją jak nie to nie.

Tak wyglada funkcja dodajaca obiekt do tablicy 

addNewPost: function() {
          var getData = new Date();
          if(this.textPost === '') {
              alert('Wpisz coś');
          }
          else {
          this.arrayPosts.unshift({
              noteId: this.arrayPosts.length,
              text: this.textPost,
              data: getData.toLocaleString(),
              star: this.starInPost
          });
            localStorage.setItem('posts', JSON.stringify(this.arrayPosts));
            this.textPost = '';
          }
      }

A tak wgylada caly kod html podanego diva

<!--Post-->

            <div v-for="post,i in arrayPosts" v-bind:id="post.noteId" v-bind:key="i">
                <button v-on:click="deleteNote">x</button>
                <div>
                    <img v-bind:src="avatarPost" alt="Avatar">
                    <i v-show="post.star" title="Ważny post" class="demo-icon icon-star"></i>
                </div>
                <div >
                    <p>Opublikowany: {{post.data}}</p>
                    <p>{{post.text}}</p>
                </div>
            </div>

<!-- END Post-->

 

komentarz 22 marca 2018 przez gremlin Dyskutant (7,600 p.)
Powiem szczerze, że przydałby się większy kawałek kodu bo nie do końca rozumiem co się tutaj dzieje. Wrzuć fragment html z tymi divami i najlepiej cały ten obiekt
komentarz 22 marca 2018 przez Vorex444 Dyskutant (9,610 p.)
edytowałem post

1 odpowiedź

+1 głos
odpowiedź 22 marca 2018 przez niezalogowany

Pierwszy fragment kodu, linia 12

Wychodzisz z funkcji, jeśli pierwszy note nie pasuje.


Swoją drogą, zamiast szukać id po atrybutach elementu

var idObject = Number(e.target.parentElement.getAttribute('id'));

Przekaż je przy wywoływaniu metody:

v-on:click="deleteNote(post.noteId)"

I dalej w metodach będziesz miał:

deleteNote: function (id) {

Przy usuwaniu elementu z tablicy, możesz użyć po prostu filter

Podobne pytania

0 głosów
1 odpowiedź 183 wizyt
0 głosów
2 odpowiedzi 712 wizyt
0 głosów
1 odpowiedź 363 wizyt
pytanie zadane 9 lutego 2023 w JavaScript przez niezalogowany

93,444 zapytań

142,436 odpowiedzi

322,698 komentarzy

62,806 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...