- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- Elektromos rásegítésű kerékpárok
- vrob: Az IBM PC és a játékok a 80-as években
- gban: Ingyen kellene, de tegnapra
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Gurulunk, WAZE?!
- Argos: Szeretem az ecetfát
- MasterDeeJay: H110-es lapban 10.gen Comet Lake működhet?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
-
LOGOUT
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
-
martonx
veterán
válasz
SektorFlop #2961 üzenetére
Nem értem mi a baj az onClick-el?
-
martonx
veterán
válasz
SektorFlop #2959 üzenetére
kiraksz hide-olt input-ot.
Amikor user rákattint a képre, annak valami azonosítóját js-el betöltöd input value-jába, és amikor elküldöd a szervernek, akkor ezt a value-t fogod figyelni, és elmenteni. -
Sk8erPeter
nagyúr
válasz
SektorFlop #2943 üzenetére
Lehet, miért ne.
Végül melyik megoldást választottad? -
SektorFlop
aktív tag
válasz
SektorFlop #2939 üzenetére
közben találtam egy ilyet, szerintem ez kell nekem: [link]
csak nem akar valamiért szuperálni.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2887 üzenetére
Így is lehet, de inkább ténylegesen stringként csapd hozzá az azonosítót, hogy mindig az elvárt eredményt kapd:
'user/user.php?insert=ok&azonosito='+<?php echo $azonosito;?>
HELYETT
'user/user.php?insert=ok&azonosito=<?php echo $azonosito;?>'
(magyarul PHP-vel fűzöd hozzá)Ennek a megoldásnak viszont hátránya, hogy nem szép, mert kevered a JavaScript-kódot a PHP-kóddal, ami szemantikai keveredés, alapvetően kerülendő. Itt már inkább egy JS-ben definiált változót kellene inkább hozzáfűznöd.
De ettől függetlenül nem csinálsz nagy butaságot ezzel a megoldással, max. kényelmetlen, de így is használható. -
Jim-Y
veterán
válasz
SektorFlop #2529 üzenetére
Próbáld így:
<input type="text" id="kijelzo"/>
<div style="display:inline-table"><input type="button" value="1" id="egy" onClick="beutes(this)"></div>
<div style="display:inline-table"><input type="button" value="2" id="ketto" onClick="beutes(this)"></div>
<div style="display:inline-table"><input type="button" value="3" id="harom" onClick="beutes(this)"></div>function beutes(id){
document.getElementById("kijelzo").value+=id.value;
} -
Speeedfire
félisten
válasz
SektorFlop #2529 üzenetére
Írja is, hogy az id nincs definiálva ami érthető is.
var gomb = document.getElementById(id);
Tehát itt nincs megadva neki, hogy melyik id kellene. Azt, hogy itt most mi is kellene neked...gondolom a buttonnál kellene visszadni az id-t. Tehát paraméterrel indítani. De azt nem tudom, hogy lehetne így visszaadni, csak jQuery-vel.
function beutes(id){
var kijelzo = document.getElementById("kijelzo");
var gomb = document.getElementById(id);
kijelzo.value = kijelzo.value + gomb.value;
} -
Sk8erPeter
nagyúr
válasz
SektorFlop #2508 üzenetére
Rövid példával élve lehet másképp is ellenőrizni:
contacts = [{name:'Pete', asd: 'asd'}, {asd: 'asd'}];
for(var index = 0; index<contacts.length;index++){
alert(contacts[index]['name']);
}
Itt látható, hogy a második cikluslépésben "undefined"-ot dob fel.Szóval próbáld így, mert így nem dob exceptiont:
var name = contacts[index]['name'];
if(!name){
name = 'Unknown name';
}
else{
name = contacts[index]['name']['formatted'];
}Remélem így jó. Lehetne ugyanilyen módon a phoneNumberre is csekkolni.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2494 üzenetére
Hmm, akkor esélyes, hogy tényleg valahol dob egy el nem kapott exceptiont, ezért áll le a ciklus, és ezért nem írja ki a neveket, de nyomozzuk ki, próbáld meg a try-catch blokkal, hátha azzal előrébb jutunk.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2492 üzenetére
Nincs mit!
De azért oldjuk meg ezt a problémát, már engem is zavar.
A contacts.length-re mennyit ír?Lehet amúgy, hogy az egész for ciklus belsejét egy try-catch blokkba kellene tenni, így legalább elkap minden esetlegesen keletkező kivételt (ilyenekre gondolok, hogy mondjuk nem létezik a contacts[index].name.formatted kulcs, csak a .name-ig, vagy ilyesmi), tehát próbáld átalakítani így a for ciklusodat (a korábbiak megmaradhatnak, még az isset() függvény felhasználása is):
for (var index = 0; index < contacts.length; index++) {
try {
var name = contacts[index].name.formatted,
li = document.createElement('li'),
phoneNumbers, phoneNumber_first;
try {
if (isset(contacts[index].phoneNumbers)) {
phoneNumbers = contacts[index].phoneNumbers;
}
if (isset(phoneNumbers[0].value)) {
phoneNumber_first = phoneNumbers[0].value;
}
} catch (e) {
alert('problem with phoneNumber...');
}
if (isset(phoneNumber_first)) {
li.innerHTML = "<a href=\"tell://" + phoneNumber + "\>name: " + name + ", name in other form: " + contacts[index].name + " displayName: " + contacts[index].displayName + ";</a>, ";
} else {
li.innerHTML = "name: " + name + ", name in other form: " + contacts[index].name + " displayName: " + contacts[index].displayName + ";";
}
ul.appendChild(li);
} catch (e) {
alert(e);
}
}Most itt annyit változtattam, hogy belepakoltam egy try-catch blokkba.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2471 üzenetére
Pont kérdezni akartam, milyen készüléked van, mert [írják], hogy pl. BlackBerry-n csak részleges a támogatása. Ez más készüléken is igaz lehet.
Ezért érdemes ellenőrizni, hogy mondjuk létezik-e egyáltalán phoneNumbers, mert ha nem, és azt próbálod felhasználni, akkor könnyen kaphatsz egy exceptiont, és onnantól nem csoda, hogy nem működik az egész.
Próbáld meg a következőképp:
Az onSuccess-t módosítsd az alábbi módon, és egészítsd ki az isset() függvénnyel, ahogy alább látható, a többi kód maradhat ugyanúgy:function isset () {
// !No description available for isset. @php.js developers: Please update the function summary text file.
//
// version: 1109.2015
// discuss at: http://phpjs.org/functions/isset
// + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + improved by: FremyCompany
// + improved by: Onno Marsman
// + improved by: Rafał Kukawski
// * example 1: isset( undefined, true);
// * returns 1: false
// * example 2: isset( 'Kevin van Zonneveld' );
// * returns 2: true
var a = arguments,
l = a.length,
i = 0,
undef;
if (l === 0) {
throw new Error('Empty isset');
}
while (i !== l) {
if (a[i] === undef || a[i] === null) {
return false;
}
i++;
}
return true;
}
function onSuccess(contacts) {
var ul = document.getElementById("list");
alert('length of contacts: '+contacts.length);
for (var index = 0; index < contacts.length; index++) {
var name = contacts[index].name.formatted,
li = document.createElement('li'),
phoneNumbers,
phoneNumber_first;
try{
if(isset(contacts[index].phoneNumbers)){
phoneNumbers = contacts[index].phoneNumbers;
}
if(isset(phoneNumbers[0].value)){
phoneNumber_first = phoneNumbers[0].value;
}
} catch(e){
alert('problem with phoneNumber...');
}
if(isset(phoneNumber_first)){
li.innerHTML = "<a href=\"tell://" + phoneNumber + "\>name: " + name + ", name in other form: " + contacts[index].name + " displayName: " + contacts[index].displayName + ";</a>, ";
}
else{
li.innerHTML = "name: " + name + ", name in other form: " + contacts[index].name + " displayName: " + contacts[index].displayName + ";";
}
ul.appendChild(li);
}
} -
SektorFlop
aktív tag
válasz
SektorFlop #2470 üzenetére
soronként beraktam egy alert-et
itt áll le a ciklus második körbe:
var phoneNumber = contacts.phoneNumbers[0].value;
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2460 üzenetére
Rájöttem, hogy a kettő között mi a különbség.
A kódban, amit Te mutattál, ez van:options.filter="";
var fields = ["phoneNumbers", "name"];a példakódban ez:
filter = ["displayName"]; // return contact.displayName field
Itt mondjuk elcseszték, filter helyett itt fields akart szerintem lenni az elnevezés, de mindegy, nem is ez a lényeg.
Tehát ott displayName-et használnak, nálad a sima name van. Lehet, hogy a name valamiért üres (ezért nem jelenik meg nálad), a displayName viszont nem.Ezért az itt lévő kódodat közelítsük meg másképpen, próbáld átírni így a JavaScript-kódot:
function onDeviceReady() {
var options = new ContactFindOptions();
options.filter = "";
var fields = ["displayName", "phoneNumbers", "name"];
navigator.contacts.find(fields, onSuccess, onError, options);
}
function onSuccess(contacts) {
var ul = document.getElementById("list");
for (var index = 0; index < contacts.length; index++) {
var name = contacts[index].name.formatted;
var phoneNumber = contacts[index].phoneNumbers[0].value;
var li = document.createElement('li');
li.innerHTML = "<a href=\"tell://" + phoneNumber + "\>name: " + name + ", name in other form: " + contacts[index].name + " displayName: " + contacts[index].displayName + ";</a>, ";
ul.appendChild(li);
}
}
function onError(error) {
alert('hiba!');
}
function init() {
document.addEventListener("deviceready", onDeviceReady, false);
}===
(#2466) SektorFlop : az entries tömb hosszát adja meg.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2455 üzenetére
Hát most így nem látok bele, alapból úgy gondolnám, ha beállítod, hogy ne csak egyet adjon vissza, akkor nem is csak egy lesz benne, és tömbként működik, különben stringként... ezt viszont cáfolja az utána lévő példa, ha tudnám próbálgatni, könnyebben meg tudnám mondani, de nálad van az eszköz.
És ha pontosan úgy csinálod, ahogy ebben a példában van, tehát alerttel megpróbálod mindegyiket kiíratni?
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2441 üzenetére
Gyors keresgélés után megtaláltam a ContactFindOptions-t: [link].
Ez alapján pedig ez a baj:
Propertiesfilter: The search string used to find contacts. (DOMString) (Default: "")
multiple: Determines if the find operation should return multiple contacts. (Boolean) (Default: false)A félkövérített rész azt mondja meg, hogy alapértelmezettként nem sok emberkét ad vissza, hanem egyet a felvett kapcsolatok közül.
Ezért a megoldás az, hogy egészítsd ki a kódodat, az
options.filter="";
sor ALÁ rakd még be ezt is:
options.multiple=true; // return multiple resultsRemélem így már sikerül, majd írd meg, mi a helyzet.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2439 üzenetére
És szerinted honnan találjuk ki, hogy mi van a contacts tömbödben?
Az sem igazán világos, a nevek kilistázására szolgáló függvénynek hogyan adhattál ennyire nem találó nevet, mint az onSuccess.Minden függvény lehetőleg kapjon olyan nevet, amire való.
Szóval ha szeretnél segítséget, teljes kódra lenne szükség, vagy legalább olyanra, amiből kiderül, egyáltalán mit csinálsz korábban.
Példakódot is felrakhatnál jsbin-re: [link]. -
Sk8erPeter
nagyúr
válasz
SektorFlop #2386 üzenetére
Szívesen! Sok sikert.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2384 üzenetére
Ne add fel, hidd el, az elején én is csak kapkodtam a fejem, hogy "most mi va'? Semmit nem értek."
Aztán szép lassan összeáll a kép, de azt az ember nem ússza meg, hogy sokat olvasgasson utána.
A header() akkor szokott hibát okozni, ha van bármiféle kiírás még a fejlécek kiküldése előtt. Elég akár egyetlen szóköz is ahhoz, hogy probléma legyen. Vagy pl. a karakterkódolási probléma: UTF-8 BOM-mal - na az nem jó, mert kiokád a doksi elejére egy felesleges karaktersorozatot, mindig BOM nélküli UTF-8-kódolást használj (ezt Notepad++-ban nagyon jól lehet csekkolni).
Azért majd még egyszer olvasd át, amiket írtam, remélem abból nagyjából vágni fogod, mihez is kéne nyúlni. De kérdezz vissza, ha valami nem egyértelmű. -
Sk8erPeter
nagyúr
válasz
SektorFlop #2379 üzenetére
Ez a kód már csak azért is fájó, mert olyan könnyen támadható az oldalad SQL Injectionnel, mint az állat. Nem ártana escape-elni a felhasználótól érkező tartalmat - soha ne bízz meg abban az adatban, ami a felhasználótól közvetlenül érkezik...
Másrészt ha kódot illesztesz be, akkor jelöld ki a kódodat itt a szövegmezőben, majd kattints a "Programkód" gombra, pont arra való, hogy valami normálisan átlátható formában legyenek a kódok.
Harmadrészt: a mailcsere.php fájlban abszolúte semmi értelme JavaScripttel átirányítani a felhasználót, arra ott a PHP header() függvénye is - felesleges tehát kiíratni bármit is.
Ahogy a példában van:
header('Location: http://www.example.com/');
de ezelőtt ne legyen SEMMILYEN kiíratás.
DE (!!!) ezt NE TEDD BELE!! Egyáltalán ne rakj bele semmilyen átirányítást, mert most AJAX-os kommunikáció zajlik, lásd később a magyarázatot.Aztán menjünk tovább.
Ez van most a kódodban:
/* Send the data using post and put the results in a div */
$.post( 'login/mailcsere.php', { email: term },
function( data ) {
var content = $( data ).find( '#content' );
$( "#result" ).empty().append( content );
}
);Ez most azt csinálja, hogy a login/mailcsere.php fájlnak elküldi a term-ben található adatot, az emailbe objektumba begyűjtve, ez majd PHP-oldalon is megjelenik.
A sikeres (!) adatküldés esetén (pl. létezik a fájl, elérhető, nem dobott vissza hibát, stb.) a content változóba úgy pakolja be az adatot, hogy a visszakapott adatokból kikeresi a "content" id-val rendelkező DOM-elemet (!), aztán a content változó tartalmát bepakolja a "result" id-val rendelkező HTML-elembe.Egyrészt: amit Te visszaadsz a PHP-fájllal, abba nem raksz bele semmi olyat, amiben "content" id-val rendelkező elem van, másrészt egyáltalán nincs "result" id-vel rendelkező elemed az oldalon.
Sőt, a PHP-fájlban csak azt a JavaScriptes visszairányítós részt íratod ki, ami AJAX-os kommunikáció esetén eleve felesleges.Először próbáld csak úgy, hogy kiíratod echo-val, hogy "siker" vagy "hiba", aztán a $.post részt egyelőre (!) így módosítod:
var content = $( data ).find( '#content' );
$( "#result" ).empty().append( content );
HELYETT
var content = $( data );
$( "#result" ).empty().append( content );Ezenkívül még tegyél be a mobil.php fájlba egy ilyet valahova a végére mondjuk:
<div id="result"></div>Ide fogja pakolni az AJAX-kommunikáció eredményét.
-
Sk8erPeter
nagyúr
válasz
SektorFlop #2372 üzenetére
Igen, jól láttad, jQuery-vel nagyon egyszerű az AJAX-os kommunikáció.
Itt konkrét példát is mutatnak rá: jQuery.post().
Nézd meg alul azt a keresőt, ami bemutatja ennek a működését.A lényeg kiszedve az oldalról, van egy ilyen form:
<form action="/" id="searchForm">
<input type="text" name="s" placeholder="Search..." />
<input type="submit" value="Search" />
</form>
<!-- the result of the search will be rendered inside this div -->
<div id="result"></div>Tehát az "s" name-mel rendelkező input-elem tartalmát szeretnénk elküldeni POST-metódussal. Itt a jQuery-kód:
/* attach a submit handler to the form */
$("#searchForm").submit(function(event) {
/* stop form from submitting normally */
event.preventDefault();
/* get some values from elements on the page: */
var $form = $( this ),
term = $form.find( 'input[name="s"]' ).val(),
url = $form.attr( 'action' );
/* Send the data using post and put the results in a div */
$.post( url, { s: term },
function( data ) {
var content = $( data ).find( '#content' );
$( "#result" ).empty().append( content );
}
);
});A lényeg ez, ami az elején lévő példakódban van, ez elég jól érthető:
$.post('ajax/test.html', function(data) {
$('.result').html(data);
}); -
Sk8erPeter
nagyúr
válasz
SektorFlop #2369 üzenetére
jQuery segítségével a legegyszerűbb: jQuery.get(), itt is van példa, itt bővebb magyarázat is (ld. 4. pont).
Kérdezz, ha elakadtál.
Új hozzászólás Aktív témák
Hirdetés
- Latitude 5550 15.6" FHD IPS Ultra 5 135U 16GB 512GB NVMe magyar vbill ujjolv IR kam gar
- Gamer PC , i7 10700 , RX 6700 XT 12GB , 32GB 3200MHz , 512GB NVME , 1TB HDD
- Eladó Konfig Ryzen 7 9700X 32GB DDR5 1TB SSD RX6900XT 16GB!
- Eladó Gamer PC i7 14700, RTX 5070, 32 GB 6000mhz RAM, Vizhűtés, 850W 80+ Táp, 2 év Garanciával
- Google Pixel 9 Pro 5G 16/256GB Szürke Színben Bontatlan 12 Hó Garanciával
- BESZÁMÍTÁS! ASROCK B650 R5 7600X 32GB DDR5 1TB SSD RTX 3070 8GB MSI MPG Gungnir 100 Enermax 750W
- iKing.Hu - Apple 16 Pro Max - Natural Titanium - Új, kipróbált
- 125 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 9 7945HX, RTX 4070
- AKCIÓ! Microsoft XBOX Series X 1TB SSD fekete játékkonzol garanciával hibátlan működéssel
- Lenovo Thinkpad T14 üzleti i5-10310u 10th gen. 8-32Gb RAM 256GB-1TB SSD gar.
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest