- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Honor 200 Pro - mobilportré
- Fotók, videók mobillal
- iPhone topik
- 45 wattos vezeték nélküli töltés jön az új iPhone-ba
- VoLTE/VoWiFi
- Bemutatkozott a Poco X7 és X7 Pro
- Milyen okostelefont vegyek?
- Xiaomi 14T Pro - teljes a család?
- Honor Magic6 Pro - kör közepén számok
-
Mobilarena
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
nevemfel
senior tag
válasz
lanszelot #10324 üzenetére
Használhatod a foreachet is, teljesen mindegy. Én nem használom, legfeljebb tömbökön, mert a DOM nem tömböket ad vissza, hanem HTMLCollection-t (ennél nincs forEach, ezért először tömbbé kell konvertálni), vagy NodeList-et, aminél van forEach, de nincs meg a többi (map, reduce, filter).
Ha javascriptről és a DOM-ról van szó, és simán végig akarsz szaladni egy iterálható gyűjtemény elemein mindenféle nagy varázslat nélkül, akkor a leghülyebiztosabb a mezítlábas for ciklus.
-
-
nevemfel
senior tag
válasz
hiperFizikus #10314 üzenetére
Az apjától olvastam a Villamosságtant, az Elméleti Villamosságtant és A fizika kultúrtörténete könyvet. Nagy koponya volt.
-
-
nevemfel
senior tag
válasz
lanszelot #10273 üzenetére
Nem írja sehol, azt adja vissza.
pl ha consol log -al megnézem, az érték undefinied.Ha a böngészőkonzolon írod be a kódot, és ott futtatod, akkor a console.log megtévesztő lehet, mert ha beírod ezt:
console.log(1);
, és entert ütsz, a Firefox ezt írja ki:1
undefined
Az első sor a console.log kimenete, a második a visszatérési értéke.ha form submit -nál szeretném figyelni, hogy üres e, és ha nem üres csak akkor jelenjen meg a submit gomb.
Egyszerűbb így:
<input type="text" required />
Így kötelező lesz kitölteni a mezőt. -
-
nevemfel
senior tag
válasz
A_ScHuLcZ #10235 üzenetére
Ránézve a kódra, én is ezt tenném, amit írtál:
Google alapján arra jutottam, hogy talán eseménykezelést kellene csinálnom a form-on létrehajtott submit eseményre, de lehet, hogy teljesen rossz úton járok.
A submit feliratú button type-ját buttonról submit-ra módosítanám, és levenném az onclick eseménykezelőt erről a gombról. A submitAction függvényt a form elem onsubmit eseményéből hívnám meg:
<form method="post" onsubmit="return submitAction()">
.A submitAction functiont is módosítani kell. Ha mehet a submit, akkor a submitAction true értékkel térjen vissza, ha nem, akkor false-al, tehát ezt:
document.forms[0].submit();
, erre kell cserélni:return true;
Na most ez az elmélet, kipróbálni nem próbáltam ki. Ami látszik a forráskódból, hogy ez egy nagyon régi script lehet, és én semmiféle validációt nem látok a submitAction-ben, így ez elvileg mindig végrehajtja a form submitet, bármi is van az email mezőben. Az sem világos, hogy a loadAction és a submitAction miért állítgatja a form action-jét, méghozzá ha jól látom, ugyanarra az értékre.
-
nevemfel
senior tag
válasz
hiperFizikus #10146 üzenetére
Jó látni, hogy a ChatGPT nem fogja elvenni a munkámat.
-
nevemfel
senior tag
Csak nem érdekünk.
Nem csak arról van szó, hogy nem érdekem.
Hétköznap dolgozom, csak alkalmanként van időm bekukkantani a topikba. Ha van esetleg valami technikai dolog, amiben kapásból segíteni tudok, akkor szívesen segítek, de sem időm, sem energiám nincs arra, hogy órákat szenteljek egy adott témának, hacsak nem pont olyan probléma, amivel jelenleg épp én is foglalkozom.
Másrészt ha már a konkrét példát vesszük, a galéria szkriptet, biztos nem állnék neki sajátot írni, hacsak nem pont az a célom, hogy sajátot akarjak készíteni, vagy ezen keresztül gyakorolni a javascript programozást. Egyrészt mert gigatonnányi galériakezelő szkript van készen, csak meg kell keresni, másrészt ha igényeset akarsz csinálni, ennek is megvannak a maga buktatói, ami miatt elég sok idő nulláról megcsinálni korrekten (különféle médiaformátumok kezelése, touch eventek mobileszközökön, túl nagy kép átméretezése a viewporthoz alkalmazkodva stb, stb...)
-
nevemfel
senior tag
válasz
Archttila #10115 üzenetére
Nálam ez a kód működik:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<a href="https://dereferer.me/?https://www.imdb.com/title/tt1448754/">Link 1</a>
<script>
(function () {
'use strict';
const REPLACEMENTS = {
'dereferer.link': {
pattern: /^https?:\/\/(?:www\.)?dereferer\.link\/\?(.+:\/\/.+)/,
noreferrer: true,
},
'dereferer.me': {
pattern: /^https?:\/\/(?:www\.)?dereferer\.me\/\?(.+:\/\/.+)/,
noreferrer: true,
},
};
for (const el of document.querySelectorAll('a')) {
for (const [name, repl] of Object.entries(REPLACEMENTS)) {
const match = repl.pattern.exec(el.href);
if (match) {
const origUrl = match[1];
console.debug(`Dereferer Remover (${name}): replacing ${el.href} -> ${origUrl}`);
el.href = origUrl;
if (repl.noreferrer) {
el.rel = 'noreferrer';
}
}
}
}
}());
</script>
</body>
</html> -
nevemfel
senior tag
válasz
hellsing71 #10097 üzenetére
Már többen belefutottak ebbe a problémába. Nagyon nem magától értetődő, hogy nem a
<button type="button">
az alap viselkedés, hanem a<button type="submit">
-
nevemfel
senior tag
válasz
hellsing71 #10095 üzenetére
Mert a <button> default type-ja "submit", és nem adtál meg type attribútumot.
-
nevemfel
senior tag
válasz
laracroft #10020 üzenetére
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>Title</title>
</head>
<body>
<form class="row" id="kereses" name="kereses" method="post">
<div class="col-md-2">
<button type="button" class="btn btn-danger" id="uj_hiba" onclick="window.open('uj_hiba.php','_blank')"> Új Hibanapló</button>
</div>
<div class="col-md-2">
<input type="text" class="form-control" id="hiba" name="hiba" placeholder="Hibajelenség">
</div>
<div class="col-md-2">
<input type="text" class="form-control" id="bejelent_nev" name="bejelent_nev" placeholder="Bejelentő neve">
</div>
<div class="col-md-2">
<button type="submit" class="btn btn-primary" name="keres" id="keres">Keresés</button>
</div>
</form>
</body>
</html><button type="button"> -t kell beállítani, ha egy gombot sima gombként akarsz használni, nem submit elemként.
-
nevemfel
senior tag
I. Objektumok.
Javascriptben egy objektum mezőit kétféle szintaxissal lehet elérni.
1. dot notation:
obj.property2. bracket notation:
obj["property"]A bracket notation akkor szükséges, ha olyan propertyt akarsz kezelni, ami
1. változóban van eltárolva,
2. javascriptben nem minősül megengedett azonosítónak (identifier). Például számjeggyel kezdődik, mint tömbelemek esetében, vagy space-t tartalmaz.Erre találták ki a bracket notationt, ami stringet vár, nem azonosítót. Ha nem stringet kap, akkor a kapott értéket stringgé konvertálja.
II. Tömbök.
Javascriptben létezik egy ún. array literal:
var cars = ["BMW", "Toyota", "Mazda"];
Az ezzel a szintaxissal létrehozott érték egy olyan objektum, aminek a prototype linkje a beépített Array objektumra mutat.
Ebből örököl egy csomó tömbspecifikus metódust (push, pop, slice, splice stb...) és a length propertyt. Tehát a tömb is objektum, de speciális objektum.III. typeof
A typeof egy legacy nyelvelem. Minden objektumra, függetlenül, hogy miből származik, a type operátor "object"-et ad vissza, kivéve function esetében. Tömb esetén tehát szintén "object"-et fog visszaadni.
Ha azt akarod tesztelni, hogy egy érték tömb vagy sem:
1. cars instaceof Array true-t ad vissza, ezzel jelezve, hogy a cars proto linkje az Array-re mutat (ami egyébként az Objectre linkel tovább). Cross framek (iframe) esetében az instanceof bugosan viselkedik, mindig false-t ad vissza.
2. Array.isArray(cars); szintén true-val tér vissza tömb esetén. Ez cross-frame kompatibilis. -
nevemfel
senior tag
Ha tömb lenne, így kellene rá hivatkozni: backpack['pocketnum']
Ez javascript esetében nem így van. Objektum propertykre is lehet hivatkozni ezzel a szintaxissal, ezt nevezik "bracket notation"-nak. Egyébként javascriptben a tömb is egy objektum. És még valami: javascriptben nincs olyan, hogy "asszociatív tömb". Az asszociatív tömb (tömb, ahol a tömbelem kulcsa string) az az objektum.
-
nevemfel
senior tag
nincs fajlrendszerunk az adott cuccon.
Na de fájlrendszer nélkül hogyan generálod le, és juttatod el ezt a html oldalt a kliensnek? Kell, hogy legyen valami http kiszolgáló, ami, feltételezem, fájlból olvas, és annak a tartalmát küldi a böngészőnek.
Van valami lehetoseg pl 1 nagy html fajlba legeneralni az osszes fuggoseget? Ha az nem megy akkor ujbol meg kell csinalnom szigoruan fuggosegek nelkul.
Természetesen van. <style></style>-ba beágyazod a stíluslapokat, <script></script> tagok közé a scripteket.
Léteznek erre ún. "inliner" toolok(CSS inliner, JS inliner), amik automatikusan legenerálják neked a kódot, de egyiket sem ismerem.
-
nevemfel
senior tag
Nézd, én tényleg nem szeretnék veszekedést ebben a témában, de azért lehetnél kicsit alaposabb, amikor egy ilyen problémát akarsz prezentálni a topikban a többiek felé.
Elhiszem, hogy a javascript használata során sok furcsasággal lehet találkozni, de ennek a nyelvnek is ugyanúgy megvan a belső logikája, hogy hogyan működik a fordító-, és a futtatókörnyezet. Ami egyébként számos ponton eltér más nyelvekétől, és ami sok félreértést szül.
-
nevemfel
senior tag
válasz
hiperFizikus #9898 üzenetére
Vagyis csak azt hívhatod meg ami előtte már deklarálva van !
Kivéve a var és function deklarációkat.
-
nevemfel
senior tag
válasz
lanszelot #9845 üzenetére
Html gombot onclick eventtel sokkal jobb kikérni
Most épp úgy teszek, mintha ezt a mondatot nem is láttam volna. Mindenkinek jobb lesz így.
Egyébként van ebben valami, de hogy "sokkal" jobb lenne, azzal vitatkoznék. Illetve attól függ, mit értesz az alatt, hogy "sokkal jobb"...
-
nevemfel
senior tag
-
nevemfel
senior tag
Rég jártam erre, de látom, hogy a topik színvonala határozottan tovább romlott. Ezt a gigantikus foshalmot, ami itt van, elképesztő...
-
nevemfel
senior tag
válasz
hiperFizikus #9773 üzenetére
...de mivel nektek lesz, ezért járuljatok evvel hozzá a teszteléséhez !
Önzetlenséged lehengerlő!
-
nevemfel
senior tag
válasz
magortaltos #9760 üzenetére
((Ha elborul az agyam, csinálok egy észrevehetetlen formot valahol a sarokban és valahogy ráveszem JS-el hogy váltsa ki a submit eseményt és máris tudok a szerveroldalnak üzenni))
Nem egészen világos, mihez kell neked a rejtett form. A fetch API, az Ajax pont erre való, hogy üzenj a szerveroldalnak, az oldal újratöltése nélkül.
-
nevemfel
senior tag
válasz
magortaltos #9735 üzenetére
Példakód:
index.html
<!DOCTYPE html>
<html lang="hu">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="data:,">
<title>Ajax példa</title>
</head>
<body>
<script>
(function() {
var ajaxFunc = function() {
fetch("http://localhost/endpoint.php")
.then(function(response) {
return response.text();
})
.then(function(body) {
console.log(body);
})
.catch(function(error) {
console.error(error);
});
setTimeout(ajaxFunc, 2000);
};
setTimeout(ajaxFunc, 2000);
}());
</script>
</body>
</html>endpoint.php
<?php
echo "helló"; -
nevemfel
senior tag
válasz
arcoskönyv #9725 üzenetére
A w3schools állítása sem hibás. A block scope-ról írnak, ami javascriptben a let és const megérkezéséig nem létezett.
-
nevemfel
senior tag
válasz
arcoskönyv #9719 üzenetére
var esetében van function scope:
The var statement declares a function-scoped or globally-scoped variable, optionally initializing it to a value.
-
nevemfel
senior tag
válasz
arcoskönyv #9695 üzenetére
Kicsit még vissza az előzőekhez, a setTimeout dokumentáltan async függvény.
Aszinkron viselkedésű, de közvetlenül nem tudod az await kulcsszóval használni, mert nem egy promise a visszatérési értéke.
-
nevemfel
senior tag
válasz
arcoskönyv #9695 üzenetére
-
nevemfel
senior tag
válasz
arcoskönyv #9693 üzenetére
Hát nem is tudom, hirtelen hol is kezdjem ... a javascript aszinkron kódokat, eseménykezelőket mennyire ismered? Függvény, mint függvényparaméter, mi az, mire jó, hogyan működik, ezek a fogalmak megvannak?
-
nevemfel
senior tag
Én meg arra utaltam, hogy egyidőben nem tudsz semmit sem futtatni párhuzamosan egy böngészőtabon. Sem asyncet, sem promiset, sem intervalt, sem semmi eventet.
A látszólagossággal meg szerintem itt nagyjából mindenki tisztában van, hogy "úgy néz ki", mintha egyidőben futnának dolgok. Oké, na és? Pont arról van szó, hogy a látszat ellenére nem párhuzamosan futnak. Te meg kötöd az ebet a karóhoz, hogy de "egyidőben" futnak. Akkó jóvan akkó, legyél vele nagyon boldog, igazad van, télleg "egyidőben" futnak. Fantasztikus felfedezés.
-
nevemfel
senior tag
Az interval, timeout ugyanazt az event-loopot használja. Egyetlen szálon fut a teljes javascript kód. Ha pl. épp számol egy kódrész, addig amíg be nem fejezi a számolást, addig sem interval, sem timeout, sem egyéb UI event nem kerül végrehajtásra.
Próbáld ki:
setTimeout(function() {
console.log("lefutna 100 ms múlva");
}, 100);
for (var war = 0; war < 10000000 ; war++) {
war;
};
console.log("lefutott a ciklus"); -
nevemfel
senior tag
válasz
martonx #9678 üzenetére
Azaz egyedül a felülírásra kellhet odafigyelned, már ha erre is tényleg oda kell figyelned, vagy pedig elfogadjuk természetesnek, hogy ha A kulcsot az egyik fül B-vel, a másik meg C-vel akarja feltölteni, akkor az fog nyerni, amelyik utoljára módosította.
Ugye a javascript kód egy oldalon egyetlen szálon fut, tehát egyetlen oldalon ilyen nem történhet. Az is feltételezhető, hogy ha több tabon fut ugyanazon a domainen található különféle script, az szintén egy szálon fog futni, dacára annak, hogy külön tabok futhatnak külön szálon. Tehát ebben az esetben egy localStorage.setItem(kulcs, walamiMuvelet(localStorage.getItem(kulcs))) atomi műveletnek tekinthető.
Nem vagyok expert abban, hogy _pontosan_ hogyan is működnek a modern böngészők javascript futtatókörnyezetei, de nagyon remélem, hogy azonos domaint egy szálon kezelnek. Mert ha nem így van, akkor a Jóisten irgalmazzon nekünk, meg a scriptjeinknek, hogy mi lesz a végeredmény, ugyanis ez teljesen szembemegy a böngészőben futó javascript alapelveivel.
-
nevemfel
senior tag
válasz
arcoskönyv #9674 üzenetére
Kell ezekre a dolgokra ügyelni vagy ezt a böngészők lerendezik a háttérben?
Én ugyan nem nagyon használtam localstorage-t, de nem tudom elképzelni, hogy a böngészők ne tudnák kezelni rendesen az adatok konkurens kezelését.
-
nevemfel
senior tag
válasz
hiperFizikus #9634 üzenetére
A rövidítések haszontalanok (sőt, egyéni véleményem: kifejezetten károsak).
A fejlesztő jellemzően az ideje 10%-át tölti azzal, hogy kódot gépel, 90%-át meg azzal, hogy "Mi az Úristen folyik itt? Nem értem.". A beszédes változónevek használata rengeteg sok elpazarolt időt takaríthat meg.
Ha valaki a fájlméret miatt szeretné lerövidíteni a programjában használt azonosítók (változók, függvények) neveit, arra ott vannak a különféle javascript minify-, illetve obfuscator eszközök.
-
nevemfel
senior tag
válasz
Chrystall #9577 üzenetére
Kicsit átalakítottam a scriptet is:
<div id="497489" style="width: 100%; overflow-y: hidden;" class="wcustomhtml">
<div class="gombkeret">
<input id="radio1" type="radio" name="radio" data-href="https://www.paypal.com/cgi-bin/webscr?test=1" checked=""><label for="radio1" class="radio"><strong> Standard Mail:<span class="shippingfee"> £5</span></strong> </label>
<input id="radio2" type="radio" name="radio" data-href="https://www.paypal.com/cgi-bin/webscr?test=2"><label for="radio2" class="radio"> <strong> Registered Mail: <span class="shippingfee"> £9</span></strong> </label>
<input id="radio3" type="radio" name="radio" data-href="https://www.paypal.com/cgi-bin/webscr?test=3"> <label for="radio3" class="radio"><strong> Download Only (.ISO format 4.3GB, playable on Computers, Tablets and Phones with free <a href="https://www.videolan.org">VLC Player</a>)</strong></label>
<div id="address_block"><label for="gmail_address">Your Gmail address:</label> <input type="text" id="gmail_address" name="gmail_address"></div>
</div>
<div id="down_icon2"><a href="https://www.paypal.com/cgi-bin/webscr"><img src="files/theme/paypal.png"></a></div>
<div id="paypalsecure"><img src="files/theme/secure2.png"></div>
<script>
var sliders = document.querySelectorAll(".gombkeret input[type='radio']");
var link = document.querySelector("#down_icon2 a");
var i;
for (i = 0; i < sliders.length; i++) {
sliders[i].addEventListener("change", function() {
var address_block = document.querySelector("#address_block");
link.setAttribute("href", this.getAttribute("data-href"));
if (this.checked && this.getAttribute("id") === "radio3") {
address_block.style.display = "block";
} else {
address_block.style.display = "none";
}
});
}
</script>
</div> -
nevemfel
senior tag
A swich case statement javascript alatt a következőképpen néz ki:
switch (expression) {
case value1:
statements1;
break; // opcionális
case value2:
statements2;
break; // opcionális
default:
statements3;
break; // opcionális
}(value1 - 2 lehet Number és string is, ez a legfőbb különbség a C-hez képest.)
Alapszintaktika, hogy bármilyen statement helyére tehetsz több statement-et tartalmazó utasításblokkot, kapcsos zárójelek közt: {}Te a breaket a {}-os utasításblokkba tetted, ami ebben az esetben nem a case esetből ugrik ki, hanem a {}-al jelölt utasításblokkból. Tehát ráfut a következő case esetre.
-
nevemfel
senior tag
válasz
hiperFizikus #9468 üzenetére
A Javascript nem az ECMAScripten alapul, a kettő ugyanaz. Azért nem Javascript lett a neve a szabványban, mert a "Java" a SUN védett márkaneve. Ugyanezen okok miatt lett a Microsoft implementáció neve JScript, a Microsoft féle Java meg J++.
-
nevemfel
senior tag
válasz
hiperFizikus #9387 üzenetére
Ugyan már! A szlovák egy gyengén típusos nyelv! Akárcsak a javascript!
-
nevemfel
senior tag
Nem tudom, hogyan akartad számmá konvertálni a stringet, de ez jól működik:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="#">
<title>Document</title>
</head>
<body>
<input type="number" id="szam" value="13">
<script>
let szam = document.getElementById("szam").value;
szam = Number(szam);
szam += 600;
console.log(szam);
</script>
</body>
</html> -
nevemfel
senior tag
Ilyesmire gondoltál?
<script>
var startDate = "2022-06-01", myArray = [1, 2, 3], newArray;
function addDays(element) {
var result = new Date(startDate);
result.setDate(result.getDate() + element);
return result.toLocaleString("hu");
}
newArray = myArray.map(addDays);
console.log(newArray);
</script>
-
nevemfel
senior tag
válasz
martonx #9173 üzenetére
Nem kell elnézést kérned, nem tettél semmi rosszat. Csupán arra akartam felhívni a figyelmet, hogy javascriptben ez a fícsör még relatíve új ((persze kinek mi számít újnak. ami tavalyelőtt még divatos volt (kovid), az ma már idejétmúlt (ukrán háború miatt)) zárójel sokszorosan bezárva, nem akarom elterelni a témát).
Typescriptben bizonyára régebb óta megtalálható (nem ismerem a typescriptet, csak megnéztem egy videót a témáról).
-
nevemfel
senior tag
válasz
inf3rno #9154 üzenetére
A datatables ingyenes, de az editor plugin nem tűnik annak. Persze lehetséges, hogy van mód az ingyenes használatra, ebben a részében nem mélyültem el.
-
nevemfel
senior tag
válasz
inf3rno #9151 üzenetére
Én a Datatablest használtam párszor. Van hozzá editor plugin, de ezzel még nem próbálkoztam, és az ráadásul fizetős, de talán ez kiváltható más megoldással.
-
nevemfel
senior tag
-
nevemfel
senior tag
válasz
lanszelot #9116 üzenetére
A te példádban az volt a fő probléma, hogy a youtube inicializációs hívásába tetted bele a video id-ját egy globális változóból. Aztán annak a változónak az értékét ugyan változtattad, de a youtube lejátszó script attól még nem figyeli folyamatosan azt a változót, mert miért is tenné?
Ha a lejátszóban videót akarsz váltani, azt csak úgy tudod megtenni, ha meghívod a player.cueVideoById(videoId) vagy player.loadVideoById(videoId) metódust.
-
nevemfel
senior tag
Na, gyorsan átírtam. Messze van a tökéletestől, de többre már tényleg nincs időm.
<script>
// video api
// Load the IFrame Player API code asynchronously.
var tag = document.createElement("script");
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName("script")[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// Replace the 'ytplayer' element with an <iframe> and
// YouTube player after the API code downloads.
var player, btn;
function onYouTubePlayerAPIReady() {
player = new YT.Player("ytplayer", {
height: "100%",
width: "100%",
playerVars: {
loop: 1,
controls: 0,
showinfo: 0,
autohide: 1,
modestbranding: 1,
vq: "hd1080",
},
events: {
// Ezzel lehet reagálni a "videó betöltött" eseményre
onReady: function (event) {
btn = document.getElementById("gomb");
// Reagálás kattintás eseményre
btn.addEventListener("click", function () {
if (player.getPlayerState() === 1) {
event.target.pauseVideo();
} else {
event.target.playVideo();
}
});
},
onStateChange: function () {
btn = document.getElementById("gomb");
if (player.getPlayerState() === 1) {
btn.innerHTML = "Szünet";
} else {
btn.innerHTML = "Indítás";
}
}
},
videoId: "",
});
}
// video api vege
// MODAL kezdete
const openModalButtons = document.querySelectorAll("[data-modal-target]");
const closeModalButtons = document.querySelectorAll("[data-close-button]");
const overlay = document.getElementById("overlay");
openModalButtons.forEach(function (button) {
button.addEventListener("click", function () {
const modal = document.querySelector(button.dataset.modalTarget);
openModal(modal, button.id);
})
})
overlay.addEventListener("click", function () {
const modals = document.querySelectorAll(".modal.active")
modals.forEach(function (modal) {
closeModal(modal);
})
})
closeModalButtons.forEach(function (button) {
button.addEventListener("click", function () {
const modal = button.closest(".modal");
closeModal(modal);
})
})
function openModal(modal, videoId) {
modal.classList.add("active");
overlay.classList.add("active");
player.cueVideoById(videoId);
}
function closeModal(modal) {
modal.classList.remove("active");
overlay.classList.remove("active");
player.pauseVideo();
}
</script>
-
nevemfel
senior tag
válasz
lanszelot #9111 üzenetére
Azt javaslom, hogy keress kész scriptet erre, mert sokmindent át kell írni a scriptben. Openmodalra kellene betölteni a videót, closemodalra leállítani, a player eventjeire rakni a lejátszógomb állapotának állítását (indítás/leállítás felirat).
Ha lenne időm, átírnám én neked, de most nem nagyon érek rá.
-
nevemfel
senior tag
válasz
lanszelot #9104 üzenetére
Ha csak kódmorzsákat osztasz meg, senki nem fog tudni segíteni.
Ha egy függvény nem lát egy adott változót, annak lényegében három oka lehet:
1. Láthatóság (scope). Javascriptben minden függvény automatikusan látja a rajta kívül deklarált változókat. Ha egy változót egy függvényben deklarálsz, az látható lesz azon függvények számára, amit ezen a függvényen belül deklarálsz. A globális változó automatikusan látható minden függvény számára.
2. Elfedés. Ha van egy külső változód, amit az adott függvénynek látnia kell, de te az adott függvényen belül is deklarálsz egy pontosan ugyanolyan nevű változót, akkor onnantól a függvény számára hozzáférhetetlenné válik a külső változó. Innentől az adott néven már csak a saját lokális változódat látod, ami egy teljesen külön entitás.
3. Sorrendiség. Azt hiszed, hogy az adott változó már megkapta a várt értéket, de valamiért a változóba írás később történik meg, mint a változó értékének kiolvasása.
-
nevemfel
senior tag
-
nevemfel
senior tag
A módszer ismert ( [link] ), a probléma meg az, hogy neked kell kézzel verzióznod az összes belinkelt forrásfájlt (css, js, img). Ha csak egy-két fájlról van szó, nem probléma, ha 15-ről, akkor, jó, ha sok szabadidőd van.
A másik lehetőség, hogy valami build toolt (pl. babel) használsz a css, js generáláshoz, ami megoldja, hogy ha a fájlok változnak, akkor a html-be beszúrt verziót automatikusan frissíti. De ez már haladó szint.
-
nevemfel
senior tag
válasz
lanszelot #9089 üzenetére
Hozz létre egy .htaccess fájlt a webroot könyvtárban (nálad ez nyilván nem a /var/www/html könyvtár, de hogy hol van, azt csak te tudhatod. Lényegében az a könyvtár, ahol a főoldal index.html van), ha még nincs, és másold bele ezt:
<FilesMatch "\.(html|htm|js|css|php)">
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</FilesMatch>
A legelső sorban (FilesMatch) láthatod, hogy milyen nevű, illetve milyen kiterjesztésű fájlokra fog vonatkozni ez a kódrész.
A Header set direktíva azt eredményezi, hogy a webszerver minden egyes válaszába ezeket a fejléceket fogja belerakni.
A Header set Cache-Control egy cacheléssel kapcsolatos fejléc, ami arra utasítja a böngészőt, hogy ne cachelje az adott oldalt. A többi (Pragma, Expires) inkább csak régebbi böngészők miatt kell.
-
nevemfel
senior tag
Ha nincs szükség Internet Explorer kompatibilitásra, akkor a legegyszerűbb az input eventet használni:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Input Event Test</title>
</head>
<body>
<input type="text" id="input">
<div id="log"></div>
<script>
var input = document.getElementById("input");
var log = document.getElementById("log");
input.addEventListener("input", updateValue);
function updateValue(e) {
log.textContent = e.target.value;
}
</script>
</body>
</html>
-
nevemfel
senior tag
válasz
Silεncε #9049 üzenetére
Igazad van, az innerHTML sem biztonságos:
There is one built-in safeguard in place, though. Just injecting a script element won’t expose you to attacks, because the section of the DOM you’re injecting into has already been parsed and run.
// This won't execute
var div = document.querySelector('#some-div');
div.innerHTML = '<script>alert("XSS Attack");</script>';
JavaScript that runs at a later time, though, will.
// This WILL run
div.innerHTML = '<script deferred>alert("XSS Attack");</script>';
// This will, too
div.innerHTML = '<img src=x onerror="alert(\'XSS Attack\')">';
Ez a megoldás viszont ígéretesnek tűnik:
If the third-party content is allowed to contain markup, a helper library like DOMPurify will remove any markup that’s not part of a secure whitelist before injecting it.
-
nevemfel
senior tag
-
nevemfel
senior tag
Konkrétumok nélkül nem tudom megítélni, hogy az a többezer sor vajon fölösleges vagy sem.
A HTML nem csak az oldal struktúráját tartalmazza, hanem a tartalmat is. (kivéve a nem szöveges tartalmakat, mint amilyenek a képek, videók)
A CSS-nek sokszor fel kell készülnie arra, hogy a sokféle készüléken sokféle böngésző van, és nem elhanyagolható számú sor kell ahhoz, hogy egyformára hozza ezeket a különféle kliens szoftvereket (CSS reset).
A JS sokszor komplett reaktív frameworkot rejt magában, ami arra kell, hogy ne kézzel kelljen "ajaxosítani" a kliens-szerver közti interakciót.
Igen, ezek a frameworkok sokszor feleslegesen nagynak tűnnek, de ha ennek nincs negatív hatása a szoftver használójára, nem lassú tőle sem a kliens, sem a szerver, sem a kettő közti kommunikáció, vagy nem _emiatt_ lassú, nem kell foglalkozni vele túl sokat.
A szoftverfejlesztők sokszor milliós havi bérét sok cégnek nem egyszerű kigazdálkodnia, ezért a legfontosabb tényező, hogy a fejlesztő gyorsan tudjon dolgozni, és a frameworkok erre vannak kitalálva. Persze ha egy szoftver nem hatékonyan használja az erőforrásokat, az ronthatja a szoftver minőségét, de idő-, és pénzkidobás olyan dolgot optimalizálni, ami jó eséllyel nem lesz szűk keresztmetszet.
Ja igen, még egy érv az elterjedt frameworkok használata mellett: Jó eséllyel nem te leszel az egyetlen, aki hozzányúl a kódhoz, és ilyenkor jól jöhet az, hogy olyan frameworkot használsz, amit a kollégáid is ismernek.
Új hozzászólás Aktív témák
Hirdetés
- Autós topik
- A fociról könnyedén, egy baráti társaságban
- EAFC 25
- Autós kamerák
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- hdanesz: Hyundai Ioniq 28 kWh 2018 2. felvonás
- Gamepad
- Apple MacBook
- Milyen program, ami...?
- További aktív témák...
- MacBook Air 15 M3 8 / 256GB dobozos 12 hónap garancia
- BESZÁMÍTÁS! Dell Latitude 5550 üzleti -Intel Ultra 7 165U16GB DDR5 RAM 1TB SSD Intel Graphics WIN11
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA! Épített KomPhone Intel i7 14700KF 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- Beszámítás! Apple Mac Studio M2 MAX 2023 32GB 512GB SSD számítógép garanciával, hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest