Hirdetés
- gban: Ingyen kellene, de tegnapra
- sziku69: Fűzzük össze a szavakat :)
- Luck Dragon: Asszociációs játék. :)
- Gadomiklos: Sziasztok! Kezdő vagyok, és nem tudom hol tudom megnézni a privát üzeneteimet.
- sziku69: Szólánc.
- Meggyi001: Kórházi ellátás: kuka vagy finom?
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- WireGuard VPN a mindennapokra
- Kalandor: „Ha engedtem volna a lelkiismeretemnek, az üzlet kevésbé lett volna jövedelmező”
- eBay-es kütyük kis pénzért
-
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
- MS SQL Server 2016, 2017, 2019
- Creative Sound BlasterX G6 7.1 USB külső hangkártya
- Lenovo ThinkPad T14S Gen1 Ryzen5 4650U / 8GB DDR
- LG 45GR95QE - 45" Ívelt OLED / 2K WQHD / 240Hz 0.03ms / NVIDIA G-Sync / FreeSync Premium / HDMI 2.1
- iPhone 12 mini 64GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3457, 94% Akkumulátor
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő




Minden függvény lehetőleg kapjon olyan nevet, amire való.

