wykonanie kodu js

0

w js stawiam pierwsze kroki, więc nie wiem w czym może być problem
i być możę na forum było już rozwiązanie ale nie umiem go znaleźć :(

Problem jest trywialny - zapewne mój błąd lub o czymś nie wiem.
chcę pod przyciskiem ,onclick wykonać prosty kod ( on nie jest problemem - działa )
jeśli podponam kod na żywca :

 <script>
      $("#rPrzycisk").on("click",
             function mojafunkcja(){
              console.log('Kukuryku');
}
</script>

działa znakomicie

ale jak zrobię include



<script  type="text/javascript" src="js/inne/rg.js"> </script> 

a kod przypnę przy buttonie

 <button id="rPrzycisk"        onclick="mojafunkcja()"  >  Cośtam  </button> 

to efekt jest taki :
nie wykona się za piewszym razem (debuger mówi że nie ma takiej funkcji )
ale jak przeładuję stronę ( F5 )
to wykonuje się bez problemu

co robię źle ?

0

działa znakomicie

Nie może działać, ponieważ zawiera błąd składniowy.

0
function mojafunkcja() {
    console.log('Kukuryku');
}

$("#rPrzycisk").on("click", mojafunkcja());
<button onclick="mojafunkcja()">b</button> 
<button id="rPrzycisk">a</button> 
0
Patryk27 napisał(a):

działa znakomicie

Nie może działać, ponieważ zawiera błąd składniowy.

?
chodzi , żę tu nie wkleiłem ka końcu nawiasu ")" ?
nie dawałem całej funkcji bo to nieistotne - sama funkcja działa , i wywaliłem o jeden nawias za dużo :)
chyba że coś jeszcze czego moje ślepe oczka nie widzą

1

Obstawiam, że skrypt ładujesz w miejscu po fragmencie, gdzie jest Twój button (case <button onclick="mojafunkcja()">b</button> ) albo przed nim (case $("#rPrzycisk").on("click",e => { ... })). Najprościej by było, gdybyś spojrzał do konsoli przeglądarki (F12 -> zakładka Console) i przeczytał ze zrozumieniem treść błędu.
Zrób to koszernie:

  1. skrypt załaduj w head (jeśli możesz, to asynchronicznie);
  2. w skrypcie podepnij się do eventu load window albo dokumentu;
  3. w skrypcie w onload dodaj listenera na kliknięcie na button i w nim dodaj swój kod.
0
ŁF napisał(a):

Obstawiam, że skrypt ładujesz w miejscu po fragmencie, gdzie jest Twój button (case <button onclick="mojafunkcja()">b</button> ) albo przed nim (case $("#rPrzycisk").on("click",e => { ... })). Najprościej by było, gdybyś spojrzał do konsoli przeglądarki (F12 -> zakładka Console) i przeczytał ze zrozumieniem treść błędu.
Zrób to koszernie:

  1. skrypt załaduj w head (jeśli możesz, to asynchronicznie);
  2. w skrypcie podepnij się do eventu load window albo dokumentu;
  3. w skrypcie w onload dodaj listenera na kliknięcie na button i w nim dodaj swój kod.
  łąduję przed ( powinienem po ? ) 

jako że w systemie piszę raport w systemie który daje możliwość tworzenia przy użyciu php/css/js
to nie wiem czy dam radę zrobić punkty 1,2,3 ( a może nie umiem :) )
spróbuję wykonać na boku

jednakże jeśli robię <button onclick="mojafunkcja()" ....
to nie kod się nie wykonuje a konsola pokazuje błąd
"Uncaught ReferenceError: mojafunkcja is not defined as HTMLButtonElement.onclick"
tak jakby nie wczytywał mojego pliku rg.js gdzie mam funkcję , przynajmniej nie od razu...
po chwili ( być może w tle się załaduje rg.js ) zaczyna działać.
jakby ten plik rg.js wczytywany był asynchronicznie albo jakoś później albo jeszcze co innego..

1

Jeśli plik jest wczytywany PO podpięciu Twojego buttona do DOM to w onclick masz odwołanie do nieistniejącej funkcji, a więc nic się nie podepnie.
Opiszę Ci jeszcze raz koszerne rozwiązanie, tym razem z przykładami:

html (z pewnymi skrótami, nie chce mi się klepać całej prawidłowej struktury):

<head>
  <script src="yourScript.js" type="text/javascript></script>
</head>
<body>
  <button id="yourButton">
    your button
  </button>
</body>

js (z jQuery) z pliku yourScript.js

$(() => $("#yourButton").click(e => alert("woo hoo!")));

jsfiddle: https://jsfiddle.net/jhd02up5/

Instrukcja obsługi:

  • $(() => { ... }); to mniej-więcej samo, co window.addEventListener("load", function() { ... });. a więc handler wykona się PO załadowaniu całego DOM. Zatem ciało funkcji anonimowej (tutaj ustawienie handlera na kliknięcie) wykona się, jak już będą załadowane wszystkie elementy DOM, w tym i Twój przycisk. Z tego powodu nie ma znaczenia, czy ten skrypt będzie dołączony przed, czy po Twoim html czy też będzie ładowany asynchronicznie - aby tylko jQuery było już załadowane.
  • po załadowaniu strony wykona się anonimowa funkcja. Ponieważ wszystkie elementy strony są już załadowane, to #yourButton też będzie istniał, zatem handler (tutaj "...") zostanie prawidłowo podpięty. Przy kliknięciu na #yourButton wykona się Twój kod, który wstawisz na miejsce kropek.
  • $(() => $("#yourButton").click(e => alert("woo hoo!"))); to inaczej
$(document).ready(
	function() {
		$("#yourButton").click(
			function(e) {
				alert("woo hoo!");
			}
		);
	}
);

1 użytkowników online, w tym zalogowanych: 0, gości: 1