Do której próbuję wysłać argument za pomocą tego zdarzenia
$("#slide-"+slideNumber).onclick=setSlide;
Tutaj nie przekazujesz argumentu do funkcji setSlide. Po pierwsze, zdaje się, że korzystasz z jQuery do obrania elementu, a to zwraca ich kolekcję, która nie posiada property onclick. Jeśli korzystasz z jQuery, to użyj metody click:
$("#slide-"+slideNumber).click(setSlide)
Po drugie, próbujesz przypisać referencję funkcji setSlide do rzekomego onclick elementu (co nie zadziała z powodu opisanego wyżej) - jedyne przekazanie argumentu jest do jQuery (selektor CSS, po którym ma być znaleziony element), a nie do setSlide; ten, jeśli już, to automatycznie otrzyma w parametrze event.
Natomiast, żeby przekazać argument, to jest parę możliwości:
$("#slide-"+slideNumber).click(() => setSlide(slideNumber))
// albo
$("#slide-"+slideNumber).click(setSlide.bind(null, slideNumber))
, albo - skoro slideNumber zawiera się w identyfikatorze elementu - to go pobierz już w funkcji (bez konieczności przekazywania przez parametr):
function setSlide({ target: { id } }) {
const slideNumber = id.match(/\d+/)?.[0];
// albo
// const slideNumber = id.slice(id.indexOf('-') + 1)
clearTimeout(timer1);
clearTimeout(timer2);
schowaj();
setTimeout("changeSlide()", 500);
}
Na marginesie: do setTimeout przekaż po prostu changeSlide - nie owijaj tego w string.