Original article: HTML Button onclick – JavaScript Click Event Tutorial

Wakati wowote unapotembelea tovuti, pengine utabofya kwenye kitu kama kiungo au kitufe.

Viungo vinakupeleka kwenye sehemu fulani ya ukurasa, ukurasa mwingine wa tovuti, au tovuti nyingine kabisa. Vitufe, kwa upande mwingine, kawaida hubadilishwa na matukio ya JavaScript ili viweze kusababisha utendakazi fulani.

Katika mafunzo haya, tutaenda kuchunguza njia mbili tofauti za kutekeleza matukio ya kubofya katika Javascript.

Kwanza, tutaangalia mtindo wa kawaida wa onclick unaofanywa moja kwa moja kutoka ukurasa wa HTML. Kisha tutaona jinsi eventListner ya kubofya ya kisasa zaidi inavyofanya kazi, ambayo inakuwezesha kutenganisha HTML kutoka kwa JavaScript.

Jinsi ya kutumia tukio la oncLick kwenye JavaScript

Tukio la kubofya hutekeleza utendakazi fulani wakati kitufe kinapobofya. Hii inaweza kuwa wakati mtumiaji anawasilisha fomu, unapobadilisha maudhui fulani kwenye ukurasa wa tovuti, na mambo mengine kama hayo.

Unaweka kitendakazi cha JavaScript unachotaka kutekeleza ndani ya tepe ya ufunguzi ya kitufe.

Sintaksia ya msingi ya onclick

<element onclick="functionToExecute()">Click</element>

Kwa mfano

<button onclick="functionToExecute()">Click</button>

Kumbuka kuwa kiumbi cha onclick ni JavaScript tu. Thamani inayochukua, ambayo ni kitendakazi unachotaka kutekeleza, inasema yote, kwani hutekelezwa ndani ya tepe inayofungua.

Katika JavaScript, unatekeleza kitendakazi kwa kuita jina lake, kisha unaweka mabano baada ya kitambulisho cha kitendakazi (jina).

Mfano wa tukio la onclick

Nimetayarisha baadhi ya HTML za msingi na mitindo kidogo ili tuweze kuweka tukio la onclick katika mazoezi ya ulimwengu halisi.

<div>
    <p class="name">freeCodeCamp</p>
    <button>Change to Blue</button>
</div>

Na hii ndio CSS kuifanya ionekane vizuri, pamoja na misimbo mingine yote ya mfano:

body {
   display: flex;
   align-items: center;
   justify-content: center;
   height: 100vh;
      }
p {
   font-size: 2rem;
}

button {
    padding: 7px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

button.blue {
    background-color: #3498db;
}

button.green {
    background-color: #2ecc71;
}

button.orange {
   background-color: orangered;
}

Kwa hivyo, kwenye ukurasa wa tovuti, hii ndio tuliyo nayo:

Untitled

Lengo letu ni kubadilisha rangi ya maandishi kua samawati tunapobofya kitufe. Kwa hivyo tunahitaji kuongeza kiumbi cha onclick kwenye kitufe chetu, kisha tuandike kitendakazi cha JavaScript ili kubadilisha rangi.

Kwa hivyo tunahitaji kufanya mabadiliko kidogo katika HTML yetu:

<div>
    <p class="name">freeCodeCamp</p>
    <button onclick="changeColor()">Change to Blue</button>
</div>

Kitendakazi tunachotaka kutekeleza ni changeColor(). Kwa hivyo tunahitaji kukiandika katika faili ya JavaScript, au kwenye faili ya HTML ndani ya tepe ya <script>.

Ikiwa unataka kuandika hati yako katika faili ya JavaScript, unahitaji kuiunganisha kwenye HTML kwa kutumia sintaksia iliyo hapa chini:

<script src="path-to-javascript-file"></script>

Ikiwa unataka kuandika hati katika faili ya HTML, iweke tu ndani ya tepe ya script:

<script>
  // Your Scripts
</script>

Sasa, tuandike kitendakazi chetu cha changeColor().

Kwanza kabisa, tunahitaji kuchagua kipengele tunachotaka kubadilisha, ambacho ni maandishi ya freeCodeCamp ndani ya tepe ya <p>.

Katika JavaScript, unafanya hivyo kwa getElementById() ya DOM, au mbinu za getElementsByClassName() au querySelector(). Kisha unahifadhi thamani katika kiambajengo.

Katika somo hili, nitakuwa nikitumia querySelector() kwa sababu ni ya kisasa zaidi na ina kasi zaidi. Pia nitakuwa nikitumia const kutangaza viambajengo vyetu badala ya let na var, kwa sababu kwa kutumia const, mambo ni salama zaidi kwani kiambajengo kinakua ni cha kusoma tu.

const name = document.querySelector(".name");

Sasa kwa kuwa tumechagua maandishi, tuandike kitendakazi chetu. Katika JavaScript, sintaksia ya msingi ya kazi inaonekana kama hivi:

function funcctionName () {
    // What to do
}

Kwa hivyo, tuandike kitendakazi chetu:

function changeColor() {
    name.style.color = "blue";
}

Nini kinaendelea?

Kumbuka kutoka kwa HTML kwamba changeColor() ndio kitendakazi tunachoenda kutekeleza. Ndiyo maana kitambulishi cha kitendakazi chetu(jina) kimewekwa kuwa changeColor. Ikiwa jina haliendani na kile kilichopo katika HTML, haitafanya kazi.

Katika DOM(Document Object Model, inaashiria HTML zote) ili kubadilisha chochote kinachohusiana na mtindo, unahitaji kuandika "style" kisha nukta (.). Hii inafuatwa na unachotaka kubadilisha, ambacho kinaweza kuwa rangi, rangi ya usuli, ukubwa ya fonti, na kadhalika.

Kwa hivyo, ndani ya kitendakazi chetu, tunachukua jina la kiambajengo tulilotangaza kupata maandishi yetu ya freeCodeCamp, kisha tunabadilisha rangi kuwa samawati.

Rangi ya maandishi yetu hubadilika kuwa samawati wakati wowote kitufe kinapobofya:

changeColor

Msimbo wetu unafanya kazi!

Tunaweza kuchukua mambo mbele kidogo kwa kubadilisha maandishi yetu kuwa rangi zaidi:

<div>
    <p class="name">freeCodeCamp</p>
    <button onclick="changeColor('blue')" class="blue">Blue</button>
    <button onclick="changeColor('green')" class="green">Green</button>
    <button onclick="changeColor('orangered')" class="orange">Orange</button></div>

Kwa hivyo, tunachotaka kufanya ni kubadilisha maandishi kuwa samawati, kijani kibichi na nyekundu-chungwa.

Wakati huu, vitendaji vya onclick kwenye HTML yetu huchukua maadili ya rangi tunayotaka kuweka kwenye maandishi. Hivi huitwa vigezo katika JavaScript. Kitendakazi tutakachoandika kitachukua yake pia, ambayo tutaiita "color".

Ukurasa wetu wa tovuti umebadilika kidogo:

Untitled

Kwa hivyo, tuchague maandishi yetu ya freeCodeCamp na tuandike kitendakazi ili kubadilisha rangi yake kuwa samawi, kijani kibichi, na nyekundu-chungwa:

const name = document.querySelector(".name");

function changeColor(color) {
   name.style.color = color;
}

Pande la msimbo katika kitendakazi huchukua jina la kiambajengo (ambapo tulihifadhi maandishi yetu ya freeCodeCamp), kisha kuweka rangi kwa chochote tulichopitisha kwenye kitendakazi cha changeColor() kwenye vitufe vya HTML.

Untitled

Jinsi ya kutumia eventListener ya kubofya katika JavaScript

Katika JavaScript, kuna njia nyingi za kufanya kitu kimoja. JavaScript inapoendelea kupitia mageuzi kadiri muda unavyopita, tulianza kuhitaji kutenganisha misimbo ya HTML, CSS na JavaScript ili kufwata mbinu bora zaidi.

Event listeners hufanya hili liwezekane vinapokuruhusu kutenganisha JavaScript na HTML. Unaweza pia kufanya hivyo kwa onclick, lakini wacha tuchukue mbinu nyingine hapa.

Sintaksia ya msingi ya eventListener

element.addEventListener("type-of-event", functionToExecute)

Sasa, hebu tubadilishe maandishi ya freeCodeCamp hadi samawati kwa kutumia click eventListner

Hii ndio HTML yetu mpya:

 <div>
     <p class="name">freeCodeCamp</p>
     <button>Change Color</button>
 </div>

Na hivi ndivyo inavyoonekana:

Untitled

Wakati huu katika hati yetu, tunahitaji kuchagua kitufe pia (sio maandishi ya freeCodeCamp tu). Hiyo ni kwa sababu hakuna JavaScript kwenye tepe ya ufunguzi ya kitufe chetu, ambayo ni vizuri.

Kwa hivyo, msimbo wetu unaonekana kama hivi:

const name = document.querySelector(".name");
const btn = document.querySelector("button");

      btn.addEventListener("click", function () {
        name.style.color = "blue";
 });

Tunaweza pia kutenganisha utendakazi wetu wa eventListener kabisa na utendakazi wetu bado utabaki vile vile:

btn.addEventListener("click", changeColor);
      function changeColor() {
        name.style.color = "blue";
}

Untitled

Jinsi ya Kuunda Kitufe cha " Show More" na "Show Less" kwa kutumia JavaScript

Mojawapo ya njia bora za kujifunza ni kutengeneza miradi, kwa hivyo tuchukue kile tumejifunza kuhusu onclick na "click" eventListner ili kuunda kitu.

Unapotembelea blogu, mara nyingi huona nukuu za makala kwanza. Kisha unaweza kubofya kitufe cha "read ore" ili kuonyesha makala yote. Hebu tujaribu kufanya hivyo.

Hii ndio HTML tunayoshughulika nayo:

 <article id="content">
     <p>
        freeCodeCamp is one of the best platforms to learn how to code.
        freeCodeCamp has a detailed curriculum that will take you from zero to
        hero in web development, software engineering, machine learning, and
        more.
      </p>
     <p>
        freeCodeCamp also has a YouTube channel containing over 1000 videos on
        web development, software engineering, machine learning, data science,
        freelance web development, database administration, and pretty much
        anything related to tech. To get updates when videos are uploaded, you
        need to subscribe to the channel and turn on notifications. You can also
        follow freeCodeCamp on Twitter, where links to well written articles and
        videos are tweeted daily.
      </p>
     <p>
        Since no one has to pay to learn how to code on freeCodeCamp,
        freeCodeCamp runs on voluntary donations from donors all around the
        world in order to pay employees and maintain servers. If you are
        generous enough consider joining the donors.
      </p></article>
    <button onclick="showMore()">Show more</button>

Ni HTML rahisi yenye ukweli fulani kuhusu freeCodeCamp. Na kuna kitufe ambacho tayari tunaambatisha kwa kubofya. Kitendakazi tunachotaka kutekeleza ni showMore(), ambacho tutakiandika hivi karibuni.

Bila CSS, hii ndio tuliyo nayo:

Untitled

Sio mbaya sana, lakini tunaweza kuifanya ionekane bora na kutenda jinsi tunavyotaka. Kwa hivyo tunayo CSS ambayo nitaelezea hapa chini:

<style>
      * {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
      }

      body {
        background: #f1f1f1;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
      }

      article {
        width: 400px;
        background: #fff;
        padding: 20px 20px 0;
        font-size: 18px;
        max-height: 270px;
        overflow: hidden;
        transition: max-height 1s;
        text-align: justify;
        margin-top: 20px;
      }

      p {
        margin-bottom: 16px;
      }

      article.open {
        max-height: 1000px;
      }

      button {
        background: #0e0b22;
        color: #fff;
        padding: 0.6rem;
        margin-top: 20px;
        border: none;
        border-radius: 4px;
      }

      button:hover {
        cursor: pointer;
        background: #1e1d25;
      }
</style>

CSS inafanya nini?

Kwa kichaguzi cha wote (*), tunaondoa ukingo chaguo-msingi na padding zilizogawiwa kwa vipengele ili tuweze kuongeza ukingo wetu na padding.

Pia tunao ukubwa wa kisanduku uliowekwa kwenye kisanduku cha mpaka ili tuweze kujumuisha padding na mpaka katika jumla ya upana na urefu wa vipengee vyetu.

Tuliweka kila kitu kati kwenye mwili kwa kutumia Flexbox na kuipa usuli wa kijivu.

Kipengele chetu cha <article>, ambacho kina maandishi, kina upana wa 400px, usuli mweupe (#fff), na kina padding ya 20px juu, 20 upande wa kushoto na kulia, na 0 chini.

Tepe za aya ndani yake zina ukubwa wa fonti wa 18px, na kisha tukawapa urefu wa juu wa 270px. Kwa sababu ya urefu wa juu wa kipengele cha makala, maandishi yote hayatadhibitiwa na yatafurika. Ili kurekebisha hili, tunaweka overflow: hidden; ili tusionyeshe maandishi hayo mwanzoni.

Sifa ya transition huhakikisha kuwa kila mabadiliko yanafanyika baada ya sekunde 1. Maandishi yote ndani ya article yapo justified na yana ukingo wa juu wa pikseli 20 ili yasiambatanishwe sana juu ya ukurasa.

Kwa sababu tuliondoa ukingo chaguo-msingi, aya zetu zote zilisukumwa pamoja. Kwa hivyo tunaweka ukingo wa chini wa pikseli 16 ili kuzitenganisha kutoka kwa nyingine.

Kichaguzi chetu, article.open, kina sifa ya max-height iliyowekwa kuwa 1000px. Hii ina maana kwamba wakati wowote kipengele cha makala kikiwa na tabaka la open lililoambatanishwa kwayo, urefu wa juu zaidi utabadilika kutoka 270px hadi 1000px ili kuonyesha makala yote. Hili linawezekana kwa JavaScript.

Tulitengeneza kitufe chetu chenye usuli kama mweusi na kukifanya kuwa cheupe. Tuliweka mpaka wake kuwa hakuna ili kuondoa mpaka chaguo-msingi wa HTML kwenye vitufe, na tukaipa kipenyo cha mpaka cha 4px ili iwe na mpaka wa mviringo kidogo.

Hatimaye, tulitumia hover pseudo-class katika CSS kubadilisha kielekezi cha kitufe hadi pointer. Rangi ya usuli hubadilika kidogo mtumiaji anapoweka kielekezi chake juu yake.

Hiyo ndiyo CSS.

Ukurasa wetu sasa unaonekana bora:

Untitled

Jambo linalofuata tunalohitaji kufanya ni kuandika JavaScript yetu ili tuweze kuona makala yote ambayo yamefichwa.

Tunayo sifa ya onclick ndani ya tepe yetu ya kufungua kitufe tayari kutekeleza kitendakazi cha showMore(), kwa hivyo tuandike kitendakazi hicho.

Tunahitaji kuchagua nakala yetu kwanza, kwa sababu lazima tuonyeshe iliyobaki:

const article = document.querySelector("#content");

Jambo linalofuata tunalohitaji kufanya ni kuandika kitendakazi showMore() ili tuweze kugeuza kati ya kuona makala yote na kuyaficha.

function showMore() {
     if (article.className == "open") {
       // read less
       article.className = "";
       button.innerHTML = "Show more";
     } else {
       //read more
       article.className = "open";
       button.innerHTML = "Show less";
     }
  }

Je, kitendakazi kinafanya nini?

Tunatumia tamko la if…else hapa. Hii ni sehemu muhimu ya JavaScript ambayo hukusaidia kufanya maamuzi katika msimbo wako ikiwa hali fulani itatimizwa.

Sintaksia ya msingi inaonekana kama hii:

if (condition == "something") {
  // Do something
} else {
  // Do something else
}

Hapa, ikiwa jina la tabaka la article ni sawa na open(hiyo ni, tunataka kuongeza tabaka la open kwake, ambalo liliwekwa kwa urefu wa juu wa 1000px kwenye CSS), basi tunataka kuona nakala iliyosalia. Vinginevyo, tunataka makala irudi katika hali ya awali ambapo sehemu yake imefichwa.

Tunafanya hivyo kwa kuikabidhi tabaka la wazi katika pande la else, ambayo inafanya ionyeshe makala yote. Kisha tunaweka tabaka katika empty string (hakuna) kwenye pande la if, ambayo inafanya kurudi kwenye hali ya awali.

Msimbo wetu unafanya kazi vizuri na mpito laini:

Untitled

Tunaweza kutenganisha HTML na JavaScript na bado tukatumia onclick, kwa sababu onclick ni JavaScript. Kwa hivyo inawezekana kuandika hii katika faili ya JavaScript badala ya kuanza kutoka kwa HTML.

button.onclick = function () {
     if (article.className == "open") {
       // read less
       article.className = "";
       button.innerHTML = "Show more";
     } else {
       //read more
       article.className = "open";
       button.innerHTML = "Show less";
     }
  };

https://www.freecodecamp.org/news/content/images/2021/08/articleonclick.gif

Tunaweza pia kufanya hivi kwa kutumia msikilizaji wa tukio:

<article id="content"><p>
        freeCodeCamp is one of the best platforms to learn how to code.
        freeCodeCamp has a detailed curriculum that will take you from zero to
        hero in web development, software engineering, machine learning, and
        many more.
      </p><p>
        freeCodeCamp also has a YouTube channel containing over 1000 videos on
        web development, software engineering, machine learning, data science,
        freelance web development, database administration, and pretty more
        anything related to tech. To get updates when videos are uploaded, you
        need to subscribe to the channel and turn on notifications. You can also
        follow freeCodeCamp on Twitter, where links to well written articles and
        videos are tweeted daily.
      </p><p>
        Since no one has to pay to learn how to code on freeCodeCamp,
        freeCodeCamp runs on voluntary donations from donors all around the
        world in order to pay employees and maintain servers. If you are
        generous enough consider joining the donors.
      </p></article><button id="read-more">Show more</button>
const article = document.querySelector("#content");
 const button = document.querySelector("#read-more");

button.addEventListener("click", readMore);

function readMore() {
     if (article.className == "open") {
       // Read less
     article.className = "";
     button.innerHTML = "Show more";
   } else {
     article.className = "open";
     button.innerHTML = "Show less";
   }
}

Utendaji wetu unabaki sawa!

Hitimisho

Natumai mafunzo haya yatakusaidia kuelewa jinsi tukio la kubofya linavyofanya kazi katika JavaScript. Tuligundua mbinu mbili tofauti hapa, kwa hivyo sasa unaweza kuanza kuzitumia katika miradi yako ya kusimba.

Thank you for reading, and keep coding.