2024-11-01, 18:23
  #1
Medlem
Finikantens avatar
Jag har 6 checkboxar för val av språk och har genom olika koder försökt att uppdatera val av språk i databasen. Här har jag mitt senaste försök som inte heller funkar så vad gör jag för fel? Av någon för mig okänd anledning verkar systemet inte förstå vem den aktuella användaren är. "userId" används som förkortning för wixData.currentUser.id och jag vet att det inte är felaktigt kodat så jag fattar inte varför det inte greppar vem det handlar om?

Kod:
wixData.get("Members", userId)

         $w('#checkbox1').onClick((event) => {

       let isChecked = $w("#checkbox1").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          english: true,

          spanish: false,

          french: false,

          german: false,

          swedish: false,

          arabic: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})

    wixData.get("Members", userId)

         $w('#checkbox2').onClick((event) => {

       let isChecked = $w("#checkbox2").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          spanish: true,

          english: false,

          french: false,

          german: false,

          swedish: false,

          arabic: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})

    wixData.get("Members", userId)

         $w('#checkbox3').onClick((event) => {

       let isChecked = $w("#checkbox3").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          french: true,

          english: false,

          spanish: false,

          german: false,

          swedish: false,

          arabic: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})

    wixData.get("Members", userId)

         $w('#checkbox4').onClick((event) => {

       let isChecked = $w("#checkbox4").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          german: true,

          english: false,

          spanish: false,

          french: false,

          swedish: false,

          arabic: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})

    wixData.get("Members", userId)

         $w('#checkbox5').onClick((event) => {

       let isChecked = $w("#checkbox5").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          swedish: true,

          english: false,

          spanish: false,

          french: false,

          german: false,

          arabic: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})

    wixData.get("Members", userId)

         $w('#checkbox6').onClick((event) => {

       let isChecked = $w("#checkbox6").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          arabic: true,

          english: false,

          spanish: false,

          french: false,

          german: false,

          swedish: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})

         $w('#checkbox6').onClick((event) => {

       let isChecked = $w("#checkbox6").checked;

       if(isChecked)

          console.log("is checked");

          setTimeout(() => {

        }, 800);

       let toUpdate = {

          arabic: true,

          english: false,

          spanish: false,

          french: false,

          german: false,

          swedish: false,

};

    wixData

      .update("Members", toUpdate)

      .then((results) => {

       $w('#dataset5').save()

         console.log(results);

  })

  .catch((err) => {

    console.log(err);

  });

})
Citera
2024-11-01, 21:06
  #2
Medlem
A-Good-Mans avatar
Tror din kod skulle kunna göras mkt enklare om du använder en checkboxgroup för att skapa upp språkvalen (om du inte redan gör det):

https://stackoverflow.com/questions/...ecked-property

Sen har du exempel där även på selectedIndices som ger dig indexvärdena för de checkboxes som kryssats i.

Du borde sen kunna:
1. Skapa upp ett enda toUpdate-objekt. Det kan vara tomt från början.
2. Loopa igenom alla checkboxes för att ta reda på vilka som är markerade.
3. I varje loopiteration lägger du till en ny property till toUpdate-objektet som ser ut som de properties du har i ditt exempel.
__________________
Senast redigerad av A-Good-Man 2024-11-01 kl. 21:08.
Citera
2024-11-02, 05:53
  #3
Medlem
pn222jws avatar
Går det att använda HTML istället så -

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Beautiful Language Selector with Jquery</title>
<link rel="stylesheet" href="language-selector.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script src="jquery.language-selector.js"></script>
</head>
<body>
<div class="language-selector">
<div tabindex="1" id="dk_container_herolist" class="dk_container language-selector-width dk_shown dk_theme_default">
<a class="dk_toggle"><span class="dk_label">Choose your Language</span><span class="select-icon"></span></a>
<div class="dk_options">
<ul class="dk_options_inner">
<li class=""><a data-dk-dropdown-value="CH">Chinese</a></li>
<li class="dk_option_current"><a data-dk-dropdown-value="EN">English</a></li>
<li class=""><a data-dk-dropdown-value="FR">French</a></li>
<li class=""><a data-dk-dropdown-value="SP">Spanish</a></li>
</ul>
</div>
</div>
<select name="languageselector" tabindex="1" class="span3" value="Choose your Language" style="display: none;">
<option value="CH">Chinese</option>
<option selected="selected" value="EN">English</option>
<option value="FR">French</option>
<option value="SP">Spanish</option>
</select>
</div>
</body>
</html>
Citera
2024-11-03, 18:01
  #4
Medlem
Finikantens avatar
Citat:
Ursprungligen postat av A-Good-Man
Tror din kod skulle kunna göras mkt enklare om du använder en checkboxgroup för att skapa upp språkvalen (om du inte redan gör det):

https://stackoverflow.com/questions/...ecked-property

Sen har du exempel där även på selectedIndices som ger dig indexvärdena för de checkboxes som kryssats i.

Du borde sen kunna:
1. Skapa upp ett enda toUpdate-objekt. Det kan vara tomt från början.
2. Loopa igenom alla checkboxes för att ta reda på vilka som är markerade.
3. I varje loopiteration lägger du till en ny property till toUpdate-objektet som ser ut som de properties du har i ditt exempel.

Bra tanke där men såvitt jag har kunnat se så går det inte att koppla boolean-värden till en checkboxgrupp i databasen. Något jag själv tycker är märkligt men jag har provat.
Citera
2024-11-03, 18:04
  #5
Medlem
Finikantens avatar
Citat:
Ursprungligen postat av pn222jw
Går det att använda HTML istället så -

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Beautiful Language Selector with Jquery</title>
<link rel="stylesheet" href="language-selector.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script src="jquery.language-selector.js"></script>
</head>
<body>
<div class="language-selector">
<div tabindex="1" id="dk_container_herolist" class="dk_container language-selector-width dk_shown dk_theme_default">
<a class="dk_toggle"><span class="dk_label">Choose your Language</span><span class="select-icon"></span></a>
<div class="dk_options">
<ul class="dk_options_inner">
<li class=""><a data-dk-dropdown-value="CH">Chinese</a></li>
<li class="dk_option_current"><a data-dk-dropdown-value="EN">English</a></li>
<li class=""><a data-dk-dropdown-value="FR">French</a></li>
<li class=""><a data-dk-dropdown-value="SP">Spanish</a></li>
</ul>
</div>
</div>
<select name="languageselector" tabindex="1" class="span3" value="Choose your Language" style="display: none;">
<option value="CH">Chinese</option>
<option selected="selected" value="EN">English</option>
<option value="FR">French</option>
<option value="SP">Spanish</option>
</select>
</div>
</body>
</html>

För att använda sig av HMTL i Wix måste man lägga in en slags kodbox men det är möjligt. Problemet är bara att jag inte riktigt greppar hur man kopplar detta till databasen?
Citera
2024-11-03, 18:04
  #6
Medlem
SvenHelsings avatar
Precis som jag tipsade om i förra tråden du postade så är det en bra idé att minimera all onödig kod. Om du inte kan få det att fungera med två språk kommer du inte att få det att fungera med sex språk. Och dåligt indenterad kod med massa onödiga tomma rader är det få som orkar läsa.
Citera
2024-11-03, 18:27
  #7
Medlem
Finikantens avatar
Här har jag redigerat min kod på det här sättet men det funkar inte heller. Anledningen till att jag inte har valt en multibox eller checkboxgrupp är att jag för en gemensam funktion vill kunna använda mig av boolean-värden (true or false):

Kod:
wixData.get("Members", userId)
         $w('#checkbox1').onClick((event) => {
       let isChecked = $w("#checkbox1").checked;
       if(isChecked === undefined) {
          console.log("is not checked");
     } else {
       let toUpdate = {
          english: true,
          spanish: false,
          french: false,
          german: false,
          swedish: false,
          arabic: false,
};
    wixData
      .update("Members", toUpdate)
      .then((results) => {
       $w('#dataset5').save()
         console.log(results);
       setTimeout(() => {
         wixLocation.to(`/members/account/${userId}`);
    }, 500);
})
__________________
Senast redigerad av Finikanten 2024-11-03 kl. 19:01.
Citera
2024-11-10, 16:02
  #8
Medlem
Finikantens avatar
Det här är min senaste version som inte heller funkar så försök finna vad jag gör fel? Jag har provat både med och utan dataset Tanken är att databasfältet "english" ska få en true-markering och de övriga språken ska få en false-markering men det händer ingenting.

Kod:
wixData.get("Members", userId)
         $w('#dataset1').getCurrentItem()
        .then(()=>{
         $w('#engButton').onClick((event) => {  
     let toUpdate1 = {
         _id: userId,
         english: true,
         spanish: false,
         german: false,
         french: false,
         swedish: false,
         arabic: false,
         language: "english",
};
    wixData
        .bulkUpdate("Member", [toUpdate1])
        .then((results) => {
     let inserted = results.inserted;
     let updated = results.updated;
         $w('#dataset1').save()
  })
  .catch((err) => {
    let errorMsg = err;
  });
    setTimeout(() => {
         wixLocation.to(`/members/account/update/${memberId}`);
    }, 1200);
});
__________________
Senast redigerad av Finikanten 2024-11-10 kl. 16:06.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in