Hirdetés
-
PROHARDVER!
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
-
Karma
félisten
Mert ezt így el tudod olvasni?
Valahogy így kellett volna kezdeni: [link]Viszont így is még elég nagy falat elsőre megemészteni, inkább pár kötelező kör:
- A böngésződben a Console-t nézted, nem lett ott hibaüzenet amikor a nyelvváltást próbálgattad?
- Nézted, hogy a böngésző jó nyelvet ad-e a navigator.language alatt?
- Cookie-kat töröltél, mielőtt nekiálltál átírni? (Hátha befolyásolja a régebbi változat.) -
Sasos
senior tag
Sziasztok.
Egy program web felületéhez szeretném hozzáadni a magyar nyelvet. A sztringek fordítása folyamatban, működik is szépen de...
Adott egy script ami (ha jól értelmezem) megnézi az user oprendszerének nyelvi beállítását, és ha talál hozzá nyelvi fájlt, akkor automatikusan arra állítja be a weblap nyelvét, ha nem talál, akkor angol az alapértelmezett. Ehhez a scripthez hozzá is adtam a magyart (a scriptben lévő egyéb nyelvek alapján HTML ISO kódokat használva), így, ha a legördülőből kiválasztom, akkor dolgozik is szépen magyarul, de automatikusan nem állítja be. Valamint, ha beállítom mondjuk németre, akkor a HTML oldal nyelve is német lesz például a Chrome felismeri, hogy német és felajánlja a fordítást (ez minden nyelv esetén működik), de ha az általam hozzáadott magyart választom akkor az oldal nyelve angol lesz. Rálesne esetleg valaki, hogy hol lehet a gubanc?<script type="text/javascript" language="javascript">var g_nUserPlacement;var g_bOverrideUserPlacement=false;var g_nUserType;var aLangArray=OnSetLanguageDefault();var g_bLoggedIn=false;var g_nSessionOkay=0;var g_nSessNoLicRemoteAdmin=905;var g_sUserSessionId="";var LanguageCombo=CreateComboBox(aLangArray[0],aLangArray[1],["$ENGLISH$","$GERMAN$","$ITALIAN$","$FRENCH$","$SPANISH$","$PORTUGUESE$","$SERBIAN$","$SWEDISH$","$FINISH$","$NORWEGIAN$","$RUSSIAN$","$DANISH$","$SIMPLIFIED_CHINESE$","$TRADITIONAL_CHINESE$","$JAPANESE$","$HUNGARIAN$"],["en,US","de,DE","it,IT","fr,FR","es,ES","pt,PT","sr,SR","se,SE","fi,FI","no,NO","ru,RU","dk,DK","zh,CN","zh,TW","jp,JP","hu,HU"],"Language","Language",SetLangCookie,undefined,false,200,22,undefined);var nLangComboCnt=LanguageCombo.getItemCount();var PopUpLangCombo=LanguageCombo.getPopupTemplate();PopUpLangCombo.setStyle("height",((16*nLangComboCnt)+((AW.ie)?3:0))+"px");var g_sLang;function OnSetLanguageDefault(){var sBrowserLanguage=navigator.language?navigator.language:navigator.userLanguage;var sLangVal=readCookie('SULang');var aLanguage;var bLangBrowserSet=false;var sDefaultAdminLang="%LOGIN_PAGE_DEFAULT_LANGUAGE%";if((GetURLParameter("Language")!="")&&(GetURLParameter("Language")!="undefined"))sLangVal=GetURLParameter("Language");if(sLangVal==null||sLangVal==undefined||sLangVal==""){if(sDefaultAdminLang!="")sLangVal=sDefaultAdminLang;else sLangVal=sBrowserLanguage.replace("-",",");bLangBrowserSet=true;}if(sLangVal==null||sLangVal==undefined){sLangVal="";bLangBrowserSet=false;}switch(sLangVal.toLowerCase()){case"de,de":case"de":sText="$GERMAN$";sLangVal="de,DE";break;case"it,it":case"it":sText="$ITALIAN$";sLangVal="it,IT";break;case"fr,fr":case"fr":sText="$FRENCH$";sLangVal="fr,FR";break;case"es,es":case"es":sText="$SPANISH$";sLangVal="es,ES";break;case"pt,pt":case"pt":sText="$PORTUGUESE$";sLangVal="pt,PT";break;case"sr,sr":case"sr":case"sr,rs":case"sr,cs":sText="$SERBIAN$";sLangVal="sr,SR";break;case"se,se":case"se":sText="$SWEDISH$";sLangVal="se,SE";break;case"fi,fi":case"fi":sText="$FINISH$";sLangVal="fi,FI";break;case"no,no":case"no":sText="$NORWEGIAN$";sLangVal="no,NO";break;case"ru,ru":case"ru":sText="$RUSSIAN$";sLangVal="ru,RU";break;case"dk,dk":case"dk":sText="$DANISH$";sLangVal="dk,DK";break;case"jp,jp":case"ja,jp":case"jp":case"ja":sText="$JAPANESE$";sLangVal="jp,JP";break;case"zh,cn":sText="$SIMPLIFIED_CHINESE$";sLangVal="zh,CN";break;case"zh,tw":sText="$TRADITIONAL_CHINESE$";sLangVal="zh,TW";break;case"hu,hu":case"hu":sText="$HUNGARIAN$";sLangVal="hu,HU";break;default:sText="$ENGLISH$";sLangVal="en,US";bLangBrowserSet=false;break;}createCookie("SULang",sLangVal,60);aLanguage=[sText,sLangVal];if(bLangBrowserSet){g_sLang=sLangVal;setTimeout("OnReloadPage()");}else return(aLanguage);}function OnLogIn(bAutoLogin){LoadingDialog(false);ShowDialog("LoggingInDialog");var sLoginCmd="%FILE%Login.xml?Command=Login";var LogInRequest=CreatePostRequest(sLoginCmd);var sUserName,sPassWord,sLanguage;if(bAutoLogin){sUserName=decodeURIComponent(GetURLParameter("user"));if(GetURLParameter("password")!="")sPassWord=decodeURIComponent(GetURLParameter("password"));else sPassWord="fvjv@unknown.com";}else{if(!g_bIsLocalAdmin)sUserName=document.login.user.value;else sUserName="";sPassWord=document.login.pword.value;}sLanguage=LanguageCombo.getControlValue();LogInRequest.setParameter("user",sUserName);LogInRequest.setParameter("pword",sPassWord);LogInRequest.setParameter("language",sLanguage);LogInRequest.setRequestHeader("X-User-Agent",navigator.userAgent);LogInRequest.setAsync(true);LogInRequest.request();LogInRequest.response=function(XMLDoc){var nResult=GetXMLValueInt(XMLDoc,"result");var sResultText=GetXMLValue(XMLDoc,"ResultText");var sWelcomeMsg=GetXMLValue(XMLDoc,"welcomemsg");var bAllowFVJVLogin=(GetXMLValue(XMLDoc,"allowFVJV")=="1")?true:false;if(bAllowFVJVLogin)g_nUserPlacement=GetXMLValue(XMLDoc,"userplacement");else g_nUserPlacement=0;if(GetURLParameter("placement")!=""){g_nUserPlacement=parseInt(GetURLParameter("placement"));g_bOverrideUserPlacement=true;if((isNaN(g_nUserPlacement))||(g_nUserPlacement<0)||(g_nUserPlacement>3))g_nUserPlacement=2;}var bRequireEmailChange=(GetXMLValue(XMLDoc,"requireemailchange")=="1")?true:false;var bUserCanSetEmail=(GetXMLValue(XMLDoc,"usercansetemail")=="1")?true:false;var sUserEmail=GetXMLValue(XMLDoc,"useremail");g_nUserType=GetXMLValue(XMLDoc,"usertype");g_sUserSessionId=GetXMLValue(XMLDoc,"sessionid");if(nResult!=g_nSessionOkay&&nResult!=g_nSessNoLicRemoteAdmin){HideDialog("LoggingInDialog");if(nResult==202){if(bRequireEmailChange&&bUserCanSetEmail)OnShowSetEmailDialog(sUserEmail,function(){ChangePasswordDialog(true);},true);else ChangePasswordDialog(true);}else AlertDialog(GetResultText(nResult,"$LOGIN_FAIL_STR$",sResultText));}else{g_bLoggedIn=true;if(sWelcomeMsg!=""&&sWelcomeMsg!=undefined&&nResult!=g_nSessNoLicRemoteAdmin){HideDialog("LoggingInDialog");if(bRequireEmailChange&&bUserCanSetEmail){OnShowSetEmailDialog(sUserEmail,function(){WelcomeDialog(sWelcomeMsg.replace(new RegExp("\\n","g"),"<br>"),OnLoginOK);},true);}else WelcomeDialog(sWelcomeMsg.replace(new RegExp("\\n","g"),"<br>"),OnLoginOK);}else{if(bRequireEmailChange&&bUserCanSetEmail){OnShowSetEmailDialog(sUserEmail,function(){OnLoginOK(false,nResult);},true);}else OnLoginOK(false,nResult);}}};}function OnLoginOK(bReplace,nResult){var sPlacement="";var bAskUserBypass=true;createCookie("Session",g_sUserSessionId,1);if(bReplace==undefined)bReplace=true;if(g_bIsiPad)g_nUserPlacement=0;if((parseInt(g_nUserType)!=0)&&(nResult!=g_nSessNoLicRemoteAdmin)&&(!g_bOverrideUserPlacement))sPlacement="%LOGIN%";else{switch(parseInt(g_nUserPlacement)){case 0:sPlacement="%FILE%ListDir.htm";break;case 1:bAskUserBypass=false;g_bFVJVLicense=true;location.href="%COMMON_FILE%FVJVLoggedIn.htm";break;case 2:g_bFVJVLicense=true;if(bReplace)ReplaceDialog("WelcomeDialog","AskUserPlacementDialog");else ReplaceDialog("LoggingInDialog","AskUserPlacementDialog");PlacementOKButton.element().focus();bAskUserBypass=false;break;case 3:bAskUserBypass=false;location.href="%FILE%Share/Console.htm";break;}}if(bAskUserBypass){if(bReplace)ReplaceDialog("WelcomeDialog","LoggingInDialog");if(GetURLParameter("user")!="")sPlacement=sPlacement+GetBWCLoadParameters();window.location=sPlacement;}}function OnLoggedOut(){g_bLoggedIn=false;}function OnReloadPage(){var sReloadURL="%LOGIN%";if(g_bIsLocalAdmin)sReloadURL="%LOGIN%&LocalAdmin=1";if(GetURLParameter("user")!=""){sReloadURL=sReloadURL+"&user="+GetURLParameter("user");sReloadURL=sReloadURL+GetBWCLoadParameters();}if(GetURLParameter("password")!="")sReloadURL=sReloadURL+"&password="+GetURLParameter("password");if(readCookie("Language")==""&&g_sLang!=undefined)sReloadURL=sReloadURL+"&Language="+g_sLang;window.location.href=sReloadURL;}function SetLangCookie(){LoadingDialog(true);sLangValue=LanguageCombo.getItemValue(LanguageCombo.getSelectedItems());createCookie("SULang",sLangValue,60);if(!g_bIsLocalAdmin)createCookie("SUUserId",encodeURI(document.login.user.value),60);if(RememberMeCheckBox.getControlValue())createCookie("SURememberMe","true",60);else createCookie("SURememberMe","false",60);g_sLang=sLangValue;setTimeout("OnReloadPage()");}function RecommendIEUpgrade(){if(parseInt(readCookie('IERec'))!=1)AlertDialog('<p>$RECOMMEND_IE_UPGRADE_1$</p>$RECOMMEND_IE_UPGRADE_2$',true);createCookie("IERec",1,60);}if(g_bBrowserOk){document.getElementById("JavaWarning").style.display="none";document.getElementById("FormLayer").style.display="block";}else{document.getElementById("JavaWarningText").style.display="none";document.getElementById("JavaWarningReload").style.display="none";document.getElementById("BrowserWarningText").style.display="block";}if(!g_bIsLocalAdmin){document.getElementById("UserNameID").style.visibility="visible";if(g_bAllowRemember){document.getElementById("RememberUserID").style.visibility="visible";}var LoginIDInput=CreateInputField(g_UserName,"UserNameInput","user",undefined,200,20,false,OnValidate);}CreatePasswordField("","PasswordInput","pword",undefined,200,20,false,OnValidate);var g_sBrowserLanguageCheck=readCookie("SULang").replace("-",",");var objLoginButton=CreatePushButton("$LOGIN$","LoginButton",OnValidate);if(g_sBrowserLanguageCheck.toLowerCase()=="it,it")objLoginButton.setStyle("width","65px");else if(g_sBrowserLanguageCheck.toLowerCase()=="fr,fr")objLoginButton.setStyle("width","70px");var bRememberMe=false;if(readCookie('SURememberMe')=="true"&&g_bAllowRemember)bRememberMe=true;var RememberMeCheckBox=CreateCheckBox("$REMEMBER_USER$","remember","remember",bRememberMe,undefined,true);if(AW.gecko)RememberMeCheckBox.setStyle("height","12px");objLoginButton.onKeyEnter=function(){OnValidate();};if(document.getElementById("SULoginLogo"))LoadCustomImage(g_bDisableBranding,g_bHasCustomLogo);if(%SHOW_THEMES%&&document.getElementById("SULoginLogo"))LoadUserTheme();else SetActiveStyleSheet("system");if(parseInt(%ALLOW_PASSWORD_RECOVERY%)!=1){document.getElementById("PasswordRecoverImg").style.display="none";document.getElementById("PasswordRecoverTxt").style.display="none";$('#LoginTaskBar').css("display","none");$('.Bottom-Logos').addClass("Bottom-Logos-No-Toolbar");}else{$('#LoginTaskBar').css("display","block");$('.Bottom-Logos').removeClass("Bottom-Logos-No-Toolbar");}if(document.getElementById("CustomHTTPLoginText").innerHTML!=""){document.getElementById("CustomHTTPLoginText").innerHTML+="<hr style='height:1px;'>";document.getElementById("CustomHTTPLoginText").style.display="block";}if(%SHOW_LANGUAGE%)document.getElementById("LangContainer").style.display="block";LoadErrorMessage("ErrMsg","logout","$LOGGED_OUT_MSG$");if(document.getElementById("Login-Wrapper")){var nOffsetLogin=0;var nLoginWrapperheight=(document.getElementById("Login-Wrapper").style.pixelHeight)?document.getElementById("Login-Wrapper").style.pixelHeight:document.getElementById("Login-Wrapper").offsetHeight;document.getElementById("Login-Wrapper").style.height=(nLoginWrapperheight)+"px";document.getElementById("Login-Wrapper").style.marginTop="-"+((nLoginWrapperheight/2)-nOffsetLogin)+"px";}if(g_bIsiPad&&LoginIDInput!=undefined)LoginIDInput.getContent("box/text").element().setAttribute('autocapitalize','off');</script>
-
Karma
félisten
Legközelebb lőjetek le hamarabb, ha elkezdek baromságokat írogatni
Az előző rant a gyártó meghatározásról irreleváns, mert a "DB"-ben megvan. A feladat egy kis adattranszformálás: csoportosítani a termékeket a gyártó szerint, majd gyártónként megkeresni az egyező szövegek minimumát, és ebből összeállítani egy objektumot, vagy valamit.
Ez az underscore.js segítségével pofonegyszerű.
Össze is dobtam JSFiddle-ön.
Bátorkodtam annyit változtatni, hogy a bemenetet JSON-re átkonvertáltam regexekkel, és kis csalással csempésztem be az inputdata változóba.
A kimeneten látszik, hogy pl. a Rockstar Energy termékekben a közös rész a "Rockstar ". A 28 Blacknél meg semmi a Schwarze Dose miatt.
-
Karma
félisten
De végülis megoldható, ha sorbarendezed az összes nevet, és ahogy végigmész rajtuk ciklusban, figyeled hogy az egyező szakasz szóhatáron ér-e véget (ugyanaz a gyártó), vagy az első szó közben (új gyártó kezdődik).
Kell egy objektum ahova gyűjtöd az eredményt ( gyártó -> termék[] ), meg az utoljára feldolgozott elem, és mehet.
Mondjuk az a para, hogy a Rockstar Energy Blue és Rockstar Energy Red stringekből az jön ki, hogy a gyártó "Rockstar Energy"
Fujj de utálom az ilyet...
-
Karma
félisten
Hát, ez egy remek indikátora annak, hogy az adatforrásod nem fain. Nem utólag kéne kitalálnod, hogy egy fulltext mezőnek melyik része a gyártó, és hol kezdődik a termék...
Legalábbis semmiképp se a JS kódnak, hanem valami köztes résznek amivel a JS kommunikál.
Nade persze azzal kell főzni, ami van. Nekem is volt már ilyen bemenetem (autótípusok, pl. FIAT BRAVA xxxx yyyy... és ebből a FIAT-ot kellett leválogatnom). Végülis ez ugyanaz, de én shortcutot találtam hozzá: az első szót leveszem, a kéttagú neveket meg kontansként eltettem és kivételként kezelem. A hasznaltauto.hu jó forrás volt.
-
r4z
nagyúr
A másodiknak az a lényege, hogy az egy gyártótól származó italok márkanevei egységesen legyenek kiemelve (igen, ez a jQuery topikban lévő adatbázishoz kapcsolódik). Konkrétabban:
Gyártó:
Rockstar Energy
Italok:
Rockstar Energy Drink
Rockstar Punched Guava
Rockstar Recovery LimonadeAzt szeretném, hogy az elsőnél ne legyen kiemelve az Energy is, hanem egységesen csak a Rockstar mindnél.
Ezt a jQuery által lekérdezett ID-k alapján szerintem vissza lehetne keresni, csak ötletem sincs, hogyan kéne. A local- vagy sessionStorage talán segíthet, mondjuk hogy ha eltérő gyártó kerül oda, mint az felgyűlt, akkor hozza csak létre a bejegyzéseket a HTML táblában, és utána a localStorage-et üríti.
Jim-Y:
Köszi a kódot, az első biztosan jó lesz, mert mindig ugyanúgy kezdődik a két string. A másodikkal játszadozok picit. -
Jim-Y
veterán
Az elsőre egy félkész megoldás lehet például:
String.prototype.sameUntil = function(other) {
var cvar = (this.length < other.length ? this.length : other.length);
for(var i=0; i < cvar; ++i) {
if(this.charAt(i) != other.charAt(i)) {
return i;
}
}
return cvar;
}Azért félkész, mert a lehetséges buktatókat nem teszteltem ki, a példa adataidra jól működik, ha egyáltalán nem egyezik, akkor 0-t ad vissza. Illetve feltételezi, hogy az első karaktertől vett egyezést keresünk.
A második kérdést én sem értem igazán. Itt valahogy mindenképp csoportosítanod kéne az ugyanolyan str1-hez tartozó adatokat. Ha pl egy tömbbe tudod valahogy tenni az alma stringhez tartozó str2-ket, akkor
var almaArray = ["aluljáró", "almárium", "alváz"];
console.log(almaArray.map(function(elem) {
return "alma".sameUntil(elem);
}).reduce(function(prev, curr) {
return (prev < curr ? prev : curr);
}));// 2
De ha objektumba teszed, úgy is meg lehet oldani.
-
r4z
nagyúr
Sziasztok!
Lenne egy elég összetett problémám.
Adott egy XML adatbázis, amiből egy HTML táblázatba gyűjtöttem ki az adatokat jQueryvel. Eddig minden jól ment. Azonban minden elemhez tartozik két string típusú változó (str1 és str2), amikre igaz, hogy str1 és str2 első néhány karaktere megegyezik, az egyező részt kell kivennem sz str2 stringből.Ezt a két stringet kéne összehasonlítania egy (szerintem) while ciklusnak, és kiköpnie egy i-t, ahol az i annak a karakternek a sorszáma, ami utolsóként megegyezik a két stringben. Ezzel az i-vel substringgel már el tudnám választani a str2 két részét. A segítségeteket kérném a while ciklushoz.
Példa:
str1 -- str2 ------ i
alma -- aluljáró -- 2
sarok - sarokpolc - 5
kendő - kender ---- 4Ezen kívül egymás utáni rekordokban az str1 megegyezik, és az szeretném, hogy ugyanannyi (legkevesebb) karaktert válasszon ki nekik.
alma - aluljáró - 2
alma - almárium - 3
alma - alváz ---- 2Tehát 2 kell eredményül itt.
-
Sk8erPeter
nagyúr
Hmm, Androiddal kapcsolatban nincs fejlesztői tapasztalatom még, de jó ezeket tudni. Remekül hangzik.
(#3986) martonx :
Jaja, annak még borzalmasabb a dokumentációja. Legalább a NuSOAP-nak a kódjában található kommentárokból valamelyest ki tudtam következtetni, mi a helyzet.Ja, egyébként amikor néztem, tehát már 2,5 éve, akkor a kódja is finoman szólva hagyott némi kívánnivalót maga után (eleve vicces, hogy a kódját és az abban található kommenteket kellett tanulmányoznom, mert különben elakadtam). No mindegy, a franc sem akar SOAP-ozni.
Csak ha muszáj, akkor meg olyan old school, mint manapság kazettán kölcsönadni valakinek egy zenét.
-
Karma
félisten
válasz
Sk8erPeter #3985 üzenetére
"De az Androiddal kapcsolatos részt nem értettem, hogy mire érted."
Arra értem, hogy androidos fejlesztéshez túl nehezek azok a libraryk, amiket Java SE/EE alatt használnék, vagy éppen a frameworkből hiányoznak olyan csomagok, amiket aktívan használnának.
Illetve van olyan Android-specifikus megoldás, ami meg lábbalhajtós: kézzel írod meg minden egyes a requestet és SOAPObject tömbökön iterálgatsz a válasz összegyűjtéséhez...
Aztán a végén már ott állsz, hogy kézzel formázod össze az envelope-ot és kézzel parsolod ki az XML-ből az anyagot, és jobban jársz... Pedig ezt nagyon rühellem.
-
martonx
veterán
válasz
Sk8erPeter #3985 üzenetére
Ha jól rémlik a PHP-ban van valamiféle natív SOAP is, bár az talán még rosszabb, mint a nusoap. Tavaly év elején mintha kísérleteztünk volna velük.
-
Sk8erPeter
nagyúr
"Nekem nagyon az az érzésem, mint Android kapcsán is, hogy a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni."
Én is egyetértek a SOAP-os résszel, és amit martonx mond, az is igaz, ahány eszköz/nyelv, annyiféle kimenet, annyiféle idióta hiba.
Mondjuk az is hozzátartozik, hogy én különösen PHP+NuSOAP-pal való generálgatás során gyűlöltem meg (itt van szenvedéseim egy lenyomata), ezért természetesen már önmagában a PHP is hibáztatható, mint gyengén típusos nyelv (ergo nem lehet vele kattintásra generálni WSDL-t, mint Visual Studio-ban pl. C#-kódból), plusz a NuSOAP is, mint akkoriban elavult, rettentő szarul dokumentált library (nem tudom, most mi a helyzet vele, csak annyit láttam, hogy végül is 2013 júniusában még módosítottak rajta valamit). De az eredeti állításokon ez nem változtat, mert ha másféle library-t használtam, akkor meg más kimenetet kaptam. És akkor meg azt lehetett "debuggolni". Még ez a NuSOAP volt a legkezelhetőbb, amivel AKKORIBAN én találkoztam (azóta nem is SOAP-oztam szerencsére), pedig az elég szomorú (volt akkor mindenképp).De az Androiddal kapcsolatos részt nem értettem, hogy mire érted.
-
martonx
veterán
"a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni"
Messzemenőkig egyetértek. Nekem a SOAP-pal a legnagyobb bajom, hogy nagyon nem kompatibilis, ahány nyelven, ahányféle SOAP megoldást használ az ember, annyiféle kimenetele lehet a dolognak. Plusz xml-ben kommunikál, aminél a Json már sokkal fejlettebb, tömörebb.
Megérett az elfeledésre, azonban sajnos még mindig rengeteg régi, jól beágyazott cucc ezt használja -
Karma
félisten
Ha önszivatáson kívül tényleg látni akarsz ilyet, akkor javaslom Java alatt a CXF-et, .NET-nél meg a WCF-et. A valóságban úgyis ehhez hasonló szintű eszközök vannak a SOAP mögött - és még csak nem is nehéz használni őket alapszinten.
Illetve a magyar intraneteken előfordul az Axis 1.4 még mindig, pedig az általa használt kódolást már semmi se támogatja... Az külön élmény önmagában is.
-
Jim-Y
veterán
Koszi. Igen ezt megtalaltam en is. Generaltattam is vele. Csak nalam nem sikerult osszeloni a javascriptes service strukturat a generalt wsdl-el:/ Este megnezem a megoldasod. Meg egyszer koszi
megj: nekem is hasonloak az erzeseim a soap kapcsan mint neked. De az lenne a lenyeg, hogy lassak ilyet is:-) Csinaltam restes web servicet is, de azzal nem voltak problemak. Igazan egyszeru volt osszehozni.
-
Karma
félisten
Sikerült összehoznom félig-meddig.
Ezzel az online WSDL generátorral csináltam a WSDL-t, értelemszerűen kitöltve a mezőket egy Hello World operationhöz. [WSDL].
Aztán így implementáltam a szervert hozzá:
var soap = require('soap');
var http = require('http');
var helloService = {
helloworld: {
helloworld_0: {
hello: function(args) {
return {
message: 'Hello ' + (args.name || 'World') + '!'
}
}
}
}
}
var wsdl = require('fs').readFileSync('hello.wsdl', 'utf8'),
server = http.createServer(function (req, resp) { resp.end("404 Not found: " + req.url) });
server.listen(8001);
soap.listen(server, '/helloService', helloService, wsdl);És erre SoapUI-ban rá tudtam csatlakozni, és még helyesen is működött
.NET-ben viszont nincs ekkora szerencsém, ott ProtocolExceptionnel elszáll. A SoapUI mock service-ével, amit ugyanebből a WSDL-ből generáltam, simán működik viszont.
---
Nekem nagyon az az érzésem, mint Android kapcsán is, hogy a SOAP egy régi idők letűnt megoldása, amit a mostani eszközökkel már nem kéne erőltetni. Akkor már egyszerűbb egy .NET/Java frontendet elérakni, ami JSON-re fordít mindent...
-
Karma
félisten
Meg utána toszik működni, se VS2013-ból, se SoapUI-ból nem tudok ráhívni. Mondjuk 0.1.0, amit egyszer valaki kinyomott és azóta nem nyúlt hozzá...
Szerintem meg ez a szerver modul sose fog működni. Viszont ha meg tudod írni a WSDL-ed, a node-soap már bíztatóbbnak tűnik - legalábbis a kommentek alapján...
-
Karma
félisten
Akkor valamit nagyon rosszul tartasz, mert én lemásoltam a példakódot kis módosításokkal, és létre is jött a service meg a WSDL is.
C:\Users\Zsolt\Documents\soaptest>node
> var soap = require('soap-server');
undefined
> function test() {
... test.prototype.hello = function(name) {
..... return "Hello" + (name || "World") + "!";
..... }
... }
undefined
> var server = new soap.SoapServer();
undefined
> var service = server.addService('helloService', new test());
undefined
> server.listen(1337, '127.0.0.1');
undefinedEzután a http://127.0.0.1:1337/helloService?wsdl linken bejött a WSDL (kimásoltam).
-
Jim-Y
veterán
aha.. hát ez nem történik meg
Mármint nem generál wsdl-t ... most két modulból építkezem:
Itt már van egy kis információcsíra arra, hogy hogyan szolgáljam ki a wsdl-t a kliensnek. Ellenben nincs WSDL példa.
Itt van wsdl példa, de nem írja le, hogy hogyan szolgáljam ki a wsdl-t
Most pont egy olyan WSDL-t próbálok írni, ami megfelel az első linken lévő soroknak, de van ami megzavar
Konkrétan:
var myService = {
MyService: {
MyPort: {
getRandomName: function() {
return names[Math.floor(Math.random()*5)];
}
}
}
}Itt a port és a service mintha fel lenne cserélve, ugyanis a wsdl-ben meg pont fordított sorrendben kell írni:
<portType name="randomNameService">
<operation name="getRandomName">
<input message="tns:getRandomName"/>
<output message="tns:returns_name"/>
</operation>
</portType>Az is jó lenne, ha rájönnék, hogy a fentebbi xml szeletnek milyen js objektum/függvény ? felel meg?
-
Jim-Y
veterán
Sziasztok. Tök új vagyok SOAP-hoz.
node-dal szeretnék csinálni egy kliens-szerver példát. A kliensem megvan, kipróbáltam, működik. Jelenleg egy élő webservice-re csináltam meg, mert úgy ítéltem meg, hogy a klienst könnyebb megírni
var soap = require('soap');
var url = 'http://www.webservicex.net/CurrencyConvertor.asmx?WSDL';
var args = {FromCurrency: "HUF", ToCurrency: "EUR"};
soap.createClient(url, function(err, client) {
client.ConversionRate(args, function(err, rate) {
console.log(rate); // 0.0032 tadaam
});
});Utána álltam volna neki a szervernek, ezt a soap-server modullal próbáltam -> [link]
Igenám, de arról egy rohadt szó nem esik, hogy a WSDL fájlt hova, mikor, mire, minek? Szóval értitek, halvány lila gőzöm nincs, hogy a wsdl fájlal mit kell csinálni :/
Eddig ennyi van meg:
var soap = require('soap-server');
var names = ["Attila", "Gábor", "Péter", "Bálint", "Gergő"];
function RandomNameService(){}
RandomNameService.prototype.getRandomName = function(){
return names[Math.floor(Math.random()*5)];
};
var soapServer = new soap.SoapServer();
var soapService = soapServer.addService('randomNameService', new RandomNameService());
soapServer.listen(1337, '127.0.0.1');A neten se írnák ám le, hogy a wsdl fájlt hova kell tenni, hogy kell pontosan létrehozni etc :S
Az lenne még az ötletem, hogy megcsinálom a wsdl fájlt, azt kiszolgálom a klienseknek, a kliensek azt így elérik: http://127.0.0.1:1337/randomNameService?wsdl , ebben definiálva vannak az elérhető szervizek, amiket utána a kliensek már meg tudnak hívni.
-
Sk8erPeter
nagyúr
válasz
trisztan94 #3968 üzenetére
Biztos velem van a baj, de én ezeken a kódokon nem tudok kiigazodni, meg nem vágom, hogy készülnek ezek, és miért így. Semmit nem fejez ki a kód az elvárt struktúráról, nincs benne megkötés, normális hibaellenőrzés, és igazából a kódból nem értem meg, mi a cél.
Igazából ha egy rövid jó leírást kaphatnánk magáról a feladatról, meg a kapott adatstruktúra konkrét felépítéséről, akkor lehet, hogy tudnánk javasolni alternatív megoldást, ami szebb kódot eredményezne. (Azt is kéne tudni, tudsz-e változtatni a kapott adatstuktúrán, vagy arra nincs lehetőséged, mert nem te rakod össze.) Ebben a formában eléggé tákolás feelingje van a dolognak. -
Jim-Y
veterán
válasz
trisztan94 #3971 üzenetére
Amúgy arra nem gondoltál, hogy csinálsz egy mondjuk Checkpoint nevű osztályt, amiben szerepelni fog minden adat egy csomópontról, illetve két példányváltozó, egy isStart, illetve egy isFinish, és a kezdő, és végpontoknál ezt simán átbillented?! Egyrészt akkor olvashatóbb lenne a kódod, másrészt szerintem logikusabb is
Ekkor kb ilyenre változna a kódod:
for (var checkpoint in checkpoints) {
if (checkpoint.lat >0 && checkpoint.lng >0 ) {
if ( checkpoint.isStart ){
}
else if( checkpoint.isFinish ) {
}
else { }
}
} -
trisztan94
őstag
válasz
martonx #3969 üzenetére
Hat igazabol nem nagyon tudom.
Az a lenyeg, hogy amikor meghivjuk a fgvt akkor atadunk neki egy bazi nagy JSON tombot, amiben utvonal adatok vannak (kkordinatak, megnevezes, kozeli helyek, stb).
Az elso elagazas azt ellenorzi, hogy a lat es long koordinatak benne vannak-e.Ami az elso es utolso elem, az lesz a kezdopont es vegpont, a koztuk levok pedig a megallok.
Jim-Y
Jaja a flagre mar en is gondoltam. Berakok egy boolean valtozot false ertekkel, es egyszeruen azt nezem, hogy igaz-e. Akkor lesz igaz, amikor a kulso elagazasbol belep, tehat egyszer fog csak valtozni az erteke. -
Jim-Y
veterán
válasz
trisztan94 #3968 üzenetére
Hát, ha nem for in -nel csinálnád, akkor az indextől függően kimenthetnéd az első elemet, vagy használhatsz egy flaget is erre a célra.
-
martonx
veterán
válasz
trisztan94 #3968 üzenetére
Esetleg valami normális jsfiddle példával szemléltetnéd, hogy mit is szeretnél?
-
trisztan94
őstag
Hello!
for (var key in JSON) {
if(parseFloat(JSON[key][3])>0 && parseFloat(JSON[key][4])>0) {
if (parseInt(key) === 1){
}
else if(parseInt(key) === Object.size(JSON)) {
}
else { }
}
}Itt három dologra kell figyelni:
1. ha a key értéke az első elem
2. ha a key értéke az utolsó elem
3. ha a key értéke más, tehát köztes számA 2. és 3. rész készen van, viszont az 1.-re nem nagyon jut eszembe semmi. Az a lényeg, hogy nem biztos, hogy az 1. vagy 2., vagy akár 3. lesz az első ami átmegy az első elágazáson. Tehát nekem az az elem kell, ami először megy át a fenti if()-en.
Hogyan kellene ezt?
-
trisztan94
őstag
véletlen hsz
-
wis
tag
Így már lefut: [link]
Csak most előjött a Same-origin policy probléma. Tehát ajax-szal nem tölthetsz le adatokat másik domainról ha az nem ad rá engedélyt.
Viszont azt megteheted, hogy szerver oldalon intézel kérést az oldal felé és a szkripted a szerver oldali kódoddal kommunikál. -
The DJ
addikt
A Bitstamp tickert szeretném megjeleníteni egy weboldalon, de nem akar működni. Valaki látja, hogy hol a hiba? A konzol syntax errort dob a 25. sorban, de nem látom mi a baj.
JSFiddle: [link]
-
trisztan94
őstag
válasz
szabo.norbi #3958 üzenetére
Vicces fiú vagy.
Karma: szvsz azt akarja, hogy csináljuk meg neki.
-
Karma
félisten
válasz
szabo.norbi #3958 üzenetére
JavaScript nyelven kellene? Vagy valami másban?
Ugyanis ha nem JS, akkor nem tényleg nem ide való...A programozás topik összefoglalóján keresztül megtalálod a többi topikot, a megfelelőbe tedd fel inkább a kérdést.
-
martonx
veterán
válasz
szabo.norbi #3958 üzenetére
várjuk a jsfiddle példádat, hogy hol a hiba a kész kódodban.
-
szabo.norbi
tag
Tudom, hogy nem ide való de hátha tudtok segíteni!
Ezt a feladatot kellene megoldanom:
1. Hozza létre a lotto nevû tömböt, a lotto.txt alapján. Hat sor, soronként 5 szám.
2. Generálja a 7. hét lottó számait. [1,90]
3 Írassa ki az így kapott tömböt[7][5] a képernyõre.
4. Hány darab 50-tõl nagyobb szám lett generálva?
5. Melyik a legkisebb generált szám?
6. Szerepel-e a 19-es szám a kihúzott számok között?7. Készítsen kimutatást:
a) Adja össze oszlopokat
pl:
37 42 44 61 62
18 42 54 83 89
5 12 31 53 60
1 28 47 56 70
54 56 57 59 71
7 21 33 39 86
9 22 32 78 89
Az 1.oszlop összege = 135
a 2.oszlop összege = 223
stb+azt elfelejtettem, hogy netbeans-ben kellene.
-
fordfairlane
veterán
válasz
trisztan94 #3955 üzenetére
Tehát annyi a kérdés, hogy miért van a promises tömbben 2x annyi elem, mint a waypoints tömbben?
Globális változók. A jóég tudja ennyiből megállapítani. "use strict"
-
martonx
veterán
válasz
trisztan94 #3955 üzenetére
Szerinted a bedobott kódod alapján honnan tudjuk?
-
trisztan94
őstag
Bocsi, hogy csak most válaszolok.
Végül sikerült megoldani future objektumokkal... vagyis... sort of.
Ez a végleges megoldás, lehet, hogy gány, de egyelőre működik, bőven elég. Tudok végre haladni.
$('.form-directions').on('submit', function () {
waypoints = [];
promises = [];
$('.waypoint').each(function () {
promises.push(geoCode($(this).val()));
});
return false;
});function geoCode(address) {
var deferred = $.Deferred();
nokia.places.search.manager.findPlaces({
searchTerm: address,
onComplete: function (data, requestStatus, requestId) {
onGeoCodingCompleted(data, requestStatus, requestId);
deferred.resolve();
},
searchCenter: map.center
});
return deferred.promise();
}Az onGeoCodingComplete függvényben nem változik semmi, csak ezt az egy plusz sort raktam bele:
if (waypoints.length == promises.length / 2) {
drivingDirections();
}Na most azért lett osztva a promises tömb kettővel, mert valamiért minden esetben a waypoints tömb elemeinek számának kétszerese volt benne. Tehát mindent 2x vett.
Tehát annyi a kérdés, hogy miért van a promises tömbben 2x annyi elem, mint a waypoints tömbben?
-
Sk8erPeter
nagyúr
válasz
trisztan94 #3951 üzenetére
Nem tudom, ezt hogy lehetett ilyen bonyolultan leírni, nekem 3-szor kellett elolvasnom, hogy felfogjam.
Ez kábé a látatlanban debuggolhatatlan kategória. Mi van a waypoints tömbben, amibe pusholod a locations[0].positiont? Azután van egy for ciklus, aminek során kétszer íródik ki ugyanaz az elem, meg kéne nézni, a push előtt nincs-e már benne eleve az az elem, ami duplikálódk. Ennél konkrétabbat akkor tudnánk mondani neked, ha láthatnánk valami működő példát.
-
Jim-Y
veterán
válasz
trisztan94 #3952 üzenetére
például egy boolean property segítségével. Amin most én dolgozom, ott Future-ök vannak, az aszinkron fv callbackje egy ilyen Future objektumot ad vissza amire lehet hívni .then()-t és ebben a callback-ben át lehet billenteni azt a property-t, ugyanis a then csak akkor hajtódik végre, ha az aszinkron kommunikációnak vége. Ez a te esetedben annyit jelent, hogy csinálj valahol egy, az aszinkron kommunikációra nézve globális property-t, majd sikeres response esetén billentsd át az értékét.
Egyébként javaslom keress rá a js promise-ra. Én még nem dolgoztam vele, de tudtommal jó cucc
-
trisztan94
őstag
Még egy kérdésem lenne.
Hogyan tudom figyelni, hogy mikor van meg az összes beírt megálló GPS koordinátája, tehát, hogy mikor fejeződött be az összes aszinkron feladat?
Nyilván itt az lenne a lényeg, hogy akkor lépjen csak be az útvonaltervezés függvényébe, ha már megvan az összes koordináta.
-
trisztan94
őstag
Hali!
Még mindig a térképes alkalmazáson dolgozom, amivel bénáztam a weblap készítés topikban. Most csak egy egyszerű kérdésem lenne. Van egy form, amit ha felad a felhasználó, kiszedi az adatokat az input mezőkből (címeket), azt pedig elküldi egy aszinkron függvénynek, ami utólag feltölt vele egy tömböt.
Jelenleg még csak két input mezővel tesztelem:
[OFF]<div class="form-group waypoint-container">
<label for="waypoints" class="col-md-1 control-label">1.</label>
<div class="col-md-11">
[/OFF] <input type="text" name="waypoints[]" class="form-control form-control-square waypoint" placeholder="Indulási hely" />
[OFF] </div>
</div>
<div class="form-group waypoint-container last-waypoint-container">
<label for="waypoints" class="col-md-1 control-label">2.</label>
<div class="col-md-11">[/OFF]
<input type="text" name="waypoints[]" class="form-control form-control-square waypoint" placeholder="Érkezési hely" />
[OFF] </div>
</div>[/OFF]Itt a form submit eseményre rakott eseménykezelőm:
$('.form-directions').on('submit', function () {
$('.waypoint').each(function () {
getDrivingDirections($(this).val());
});
return false;
});A getDrivingDirections függvény alapvetően két dolgot csinál: első körben geocode-olja (magyarul "geokód"?) a beírt adatokat, hogy GPS koordinátákkal tudjunk dolgozni. Amikor megkaptuk a koordinátákat, akkor pedig tervez rá egy útvonalat a megadott paraméterekkel. Tehát a getDrivingDirections függvény két másik függvényt hív meg: geoCode() és planRoute(). Egyelőre még csak a geoCode függvény implementálásánál tartok.
Tehát miután meghívtuk a getDrivingDirections-t, meghívódik a geoCode():
function geoCode (address) {
nokia.places.search.manager.findPlaces({
searchTerm: address,
onComplete: onGeoCodingCompleted,
searchCenter: map.center
});
}Ez végül meghívja amikor végetért az aszinkron feladat az onGeoCodingCompleted függvényt:
function onGeoCodingCompleted(data, requestStatus, requestId) {
if (requestStatus == "OK") {
var locations = data.results.items;
waypoints.push(locations[0].position);
for (var i = 0; i < waypoints.length; i++) {
console.log(waypoints[i]);
}
} else if (requestStatus == "ERROR") {
alert("hiba");
}
}Na és most jönne a tényleges kérdés. A console.log 3 objektumot ad vissza mindig, pedig csak két input mező van. Mindig az első input mezőt logolja kétszer:
Miért?
(Azért írtam le így az egész működést, mert biztosan lesznek még kérdéseim ezzel kapcsolatban, így ezt megelőlegeztem magamnak
)
-
BomiBoogie
MODERÁTOR
válasz
Sk8erPeter #3947 üzenetére
Rendben, jelezzetek privátban.
-
Sk8erPeter
nagyúr
válasz
martonx #3948 üzenetére
De az JScript-interpreter, nem JavaScript.
Komolyra fordítva amúgy igazad van (mondjuk nálam nem túl sokszor merült fel az igény a cscript.exe-vel történő JS-futtatásra, az ilyen módon történő tesztelésre), szerintem is jobb lenne egy külön részbe tenni a Node.js-t úgy általában, azt inkább a haladóknak ajánlva, és a kezdőknek szóló részből egyszerűen kiszedni, hogy ne zavarjuk össze a kezdő ember fejét - szerintem jobb, ha nem kavarunk be neki a szerveroldali programozást lehetővé tevő nodejs-sel, mert nem fogja tudni hova tenni, amikor ő csak eseménykezelőt akart kötni egy gomb klikk eseményére, vagy JS-sel meg akarta változtatni egy elem betűinek színét. Vagy max. nagyon OFF-ként benthagyni, de én sem látom szükségét.
-
martonx
veterán
válasz
Sk8erPeter #3947 üzenetére
Most komolyan egy szimpla .js kipróbálásához windows alatt tényleg nem kell semmi.
Nyitsz egy command line-t, majd cscript xy.js és már fut is a js-ünk. Sőt dupla kattintásra is elindul, csak ekkor nem a cscript hanem a wscript fogja futtatni. Rémlik ezeknél az üzenet kiírást másképp kell megoldani, mint böngészős futtatáskor, azaz wscript.echo(üzenet) vagy valami ilyesmi a szintaktikája.Vagy csinál valaki egy .hta-t, és abban futtatja.
Ahogy mondtam a lehetőségek száma végtelen.
Szerintem az a legjobb, ha magával a js futtatással nem foglalkozik a leírás, aki erre adja fejét, az csak meg fogja tudni oldani, hogy futtassa a js-ét
bármilyen módon.
-
Sk8erPeter
nagyúr
Nem szántam offenzívnek, mert amúgy hasznos anyagokat gyűjtöttél össze, raktál bele energiát, bocs, ha úgy tűnt.
Inkább jelezni szerettem volna, hogy az említett rész a Node.js-sel ebben a formában még egy kezdőt nagyon nagy eséllyel teljesen összezavar, mert abban a fázisban az sem tiszta, mi az a kliensoldali és szerveroldali JavaScript-kód, mi az a Node.js, és még kismilliónyi lehetőség van a Node.js telepítése előtt, amivel ki lehet próbálni a JS-kódot. Na meg akkor már a Windows-ra telepítés módszerét is meg kéne említeni.Mondjuk az csak egy installer-fájl a nodejs.org-ról: http://nodejs.org/. Amúgy érdekességként: Windows-on lehetséges Web Platform Installeren keresztül is bekattintani a Node.js telepítését.
"Nekem sokszor nagyon jól jött volna, ha ezt már korábban ismerem, például ha csak ki akarom próbálni élesben, hogy mit csinál a map(), akkor nem csinálok
- egy .js fájlt benne implementálva egy tömböt, meghívva rá a map-et.
- illetve egy html fájlt, amiben hivatkozok a js fájlra,
- majd a html fájlt megnyitom a böngészőben
Vagy,
- nem nyitok egy firefoxot, benne egy konzolt
- meg egy scratchpad-et
Vagy megyek a jsfiddle-re"Ezek például mind jó alternatívák, amiket meg lehet említeni.
A böngészőt az ember úgyis folyton megnyitva tartja.Ott nyom egy Ctrl+Shift+I (vagy F12) billentyűkombót, és az ennek segítségével előhívható fejlesztői panelon keresztül, a Console fülön tud tenni egy gyorspróbát a JS-kódokkal; a fejlesztői panellel úgyis minden webfejlesztőnek meg kell ismerkednie.
"Hanem nyitok pl egy aptana studio-t, vagy a geditet (mindkettőben van embedded terminal) és sokkal gyorsabban tudom tesztelni a megírt kódomat, mint a fenti esetekben."
Ez is egy módszer.
Egy haladó részben esetleg azt is meg lehetne említeni, hogy mind böngészőn, mind integrált fejlesztőkörnyezeten (IDE) keresztül van lehetőség JavaScript-kód debuggolására, utóbbira példa a NetBeans Connector, ami szerintem nagyon hasznos, itt tettem róla említést:
http://prohardver.hu/tema/weblap_keszites/hsz_10596-10596.html
http://stackoverflow.com/questions/15801506/how-to-debug-javascript-and-php-togheter-in-the-same-netbeans-7-3-project/20809988#20809988Szívesen foglalkoznék ezzel, de se időm, se energiám most erre.
(#3944) BomiBoogie :
OK, köszi, reméljük, lesz előbb-utóbb valakinek ideje rá, vagy nekem, vagy másnak. -
martonx
veterán
Szerintem vagy vegyük ki a node.js-es részt, vagy akkor már soroljuk fel a kismillió egyéb lehetőséget, ahogy lehet futtatni egy javascriptet.
Pl, hogy mást ne mondjak windows-on simán konzolból lehet futtatni, még node.js-se kell hozzá. Aztán ott van a kismillió fejlesztő környezet, mindenféle platformon, amikkel minddel lehet js-t futtatni, mindegyikkel egyszerű.
-
Jim-Y
veterán
válasz
Sk8erPeter #3943 üzenetére
A node js-el jon egy js interpreter amivel a js fleodat tudod clin keresztul tesztelni. De a nodejs meg nincs alapbol felteve ezert le kellett irni hogy hogyan tegye fel az ember. A nodejs ebben az ertelemben csak a bongeszobe epitett interpreter alternativaja. Egyebkent tudtommal lehet kerni modositast a modkerben. Ha szerinted valami rossz akkor nyugodtan szedesd ki nem fogok megsertodni, bar szerintem pont ez a nodejs-es resz tok hasznos.
Nekem sokszor nagyon jól jött volna, ha ezt már korábban ismerem, például ha csak ki akarom próbálni élesben, hogy mit csinál a map(), akkor nem csinálok
- egy .js fájlt benne implementálva egy tömböt, meghívva rá a map-et.
- illetve egy html fájlt, amiben hivatkozok a js fájlra,
- majd a html fájlt megnyitom a böngészőbenVagy,
- nem nyitok egy firefoxot, benne egy konzolt
- meg egy scratchpad-etVagy megyek a jsfiddle-re
Hanem nyitok pl egy aptana studio-t, vagy a geditet (mindkettőben van embedded terminal) és sokkal gyorsabban tudom tesztelni a megírt kódomat, mint a fenti esetekben. Én csakis ezért írtam bele az összefoglalóba azt a részt. De mondom, ha tényleg kusza, akkor szedjük ki, vagy fogalmazzuk át.
-
BomiBoogie
MODERÁTOR
válasz
Sk8erPeter #3943 üzenetére
Itt a raw, javítsátok, ahogy gondoljátok és frissítem.
-
Sk8erPeter
nagyúr
válasz
Sk8erPeter #3938 üzenetére
Most nézem a Jim-Y jegyzetekkel kiegészített összefoglalót... na basszus, nem ártott volna még lektorálni előtte.
Én inkább az elején lévő linkekre koncentráltam, amiket be lehetett volna rakni, de vannak benne rendkívül összeszedetlen részek, például van egy ilyen rész: "Ha a saját gépünkön szeretnénk tesztelni a megírt js kódunkat" - utána meg az következik, hogy hogyan tudjuk felrakni a Node.js-t...
Mégis hogy jön ide? Vagy akkor miért nincs kiegészítve azzal, hogy mi a különbség a kliensoldali és szerveroldali JavaScript-kódok között? Egy olyan emberke, aki épp szeretné elsajátítani a JavaScriptet, az valószínűleg teljesen össze lesz zavarva ezek után.
-
BomiBoogie
MODERÁTOR
Frissült a téma összefoglaló!
-
caindwan
aktív tag
Heló!
Hogyan lehet float-ból a tizedes pont utáni összeget int-be kinyerni? pl 2.3441 = 3441 -
Sk8erPeter
nagyúr
"Az eseménykezelőknél ez lehet, hogy így van (ezt nem tudtam), de általánosságban, javascriptben, pedig úgy, ahogy írtam."
Ezt hogy érted, hogy általánosságban? Mármint mire vonatkozóan?(#3928) :
ezt a linkes dolgot végül elfelejtettem, szerintem nyugodtan mehetnek a linkjeid végül is az összefoglalóba, hasznos anyagokat szedtél össze, főleg a Douglas Crockford-előadássorozat jó lesz oda.
Szóval nyugodtan berakathatnád a modker topicban!
Csak a Twitteres követősdi nem kell szerintem. -
Jim-Y
veterán
"- a $(this) a this objektumból csinál egy jquery objektumot, így a $(this)-re meghívhatjuk a jquery-s függvényeket. Mint a példában: $(this).after("<p>Empty this</p>");
Az after egy jquery metódus, jquery objektumokon van értelmezve. this.after() hibás!"Meg ez is...
Hát pedig ha akarod, ha nem, ez így van
Ez nettó marhaság, az eseménykezelő függvényekben mindig az az egy elem a this, aki az eseményt generálta. Tehát semmi szükség ID-t adni a bemeneti mezőnek!
Az eseménykezelőknél ez lehet, hogy így van (ezt nem tudtam), de általánosságban, javascriptben, pedig úgy, ahogy írtam. Tehát marhaságnak nem marhaság, sőt, csak ez esetben pontatlan.
-
Karma
félisten
"- a this mindig a hívó objektumra utal. Ebben az esetben amire a focusout-ot meghívtuk. Mire hívtuk? $('input')-ra ami egy olyan objektum ami az oldal összes input mezejét tartalmazza."
Ez nettó marhaság, az eseménykezelő függvényekben mindig az az egy elem a this, aki az eseményt generálta. Tehát semmi szükség ID-t adni a bemeneti mezőnek! Sőt!
Itt van máshogy megjavítva a kód. Mint látható, csak két gond volt a kóddal: az aposztrófok a this körül, és hogy nem az input mező értékét próbálta lengthtel ellenőrizni. Bátorkodtam sokszorosítani az input mezőket, hogy demonstráljam az álláspontomat.
-
Jim-Y
veterán
Több gond is van vele, egyrészt $(this) és nem $('this'), mert utóbbi esetben a DOM this tageket szűrnéd ki vele.
Másrészt amit meg akarsz csinálni azt nem így kell, mert a a $(this) ebben a kontextusban az oldalon található input mezőket adja vissza.
A $(this).length == 0 akkor igaz, ha az oldalon nincs <input>.Helyesen: [link]
Magyarázat:
- a this mindig a hívó objektumra utal. Ebben az esetben amire a focusout-ot meghívtuk. Mire hívtuk? $('input')-ra ami egy olyan objektum ami az oldal összes input mezejét tartalmazza.
- a $(this) a this objektumból csinál egy jquery objektumot, így a $(this)-re meghívhatjuk a jquery-s függvényeket. Mint a példában: $(this).after("<p>Empty this</p>");
Az after egy jquery metódus, jquery objektumokon van értelmezve. this.after() hibás!
- a this.value helyett írhattunk volna $(this).val() -t is, ugyanazt az eredményt kapjuk. Ellenben, míg a value az input element beépített property-je, addig a val() egy jquery-s függvény, valószínűleg a val()-is a value-t kérdezi le. Annyi különbség mégis van, hogy a val() egy jquery objektummal tér vissza, tehát működik rajta a method chaining. -
Zedz
addikt
Sziasztok!
Ez a kód miért nem működik? Miért nem reagál az if-en belüli this szóra?
Szerk.: a dolog lényege, hogyha üres az input mező akkor az alá szúrjon be valamit.
-
Sk8erPeter
nagyúr
Tegnap én is csináltam egy nagyon rövidet, csak ilyen tök egyszerűekkel, hogy linkek jsFiddle-re és társaira, és hogy aztán bővítjük, csak aztán nem küldtem el a modker topicba, de most megtettem, de majd holnap átrágom azt is, amit írtál.
Most csak nagyon gyorsan átfutottam, és jó linkek vannak benne, de szerintem kissé túl sok, nem tudom, ki fog elolvasni/megnézni ennyi mindent; például a végefelé a Twitteres linkek úgy, ahogy van, felejtősek, tök felesleges ezeket belerakni, szerintem nem illenek a PH-s összefoglalóba (érdekességként lehet őket követni, de ide inkább a tanulást elősegítő vagy hülye kérdéseket megelőző linkeket kellene bepakolni). -
Sk8erPeter
nagyúr
válasz
fordfairlane #3927 üzenetére
Ja értem, ezek szerint akkor mindketten félreértettük, amire gondoltál, sorry. Eleinte azt hittem, azt véded, ha valaki behányja a konkrét függvényhívást vagy akár implementációt az onclick-be és társaiba, de így utólag visszaolvasva egyértelműen kihangsúlyoztad, hogy nem erről van szó, csak akkor nem jött át, bocs.
-
Jim-Y
veterán
-
Jim-Y
veterán
válasz
Sk8erPeter #3923 üzenetére
Szia, gondoltam csinálok egy alapot a téma-összefoglalónak, mert ha valaki nem kezdi el, akkor nem lesz belőle semmi
a bejegyzés végén van egy raw link, ami arra szolgál, hogyha valaki bővítené szeretné, vagy csinosítani/egyéb, akkor meglegyen a forrás. üdv
-
fordfairlane
veterán
válasz
Sk8erPeter #3923 üzenetére
Mit tekintünk ez esetben "tisztességes implementációnak"?
Például egy angularjs-t, ahol egyedi attribútumokkal kötöd össze a megfelelő html kódot a script modell vagy a controller objektumaival.
-
fordfairlane
veterán
válasz
martonx #3925 üzenetére
Mégegyszer: Nem az onevent attribútumot védem jelen implementációs formájában, hanem azt, hogy van logikája az attribútum-event kötésnek. Az event binding összekötő elem, nem tisztán struktúra vagy viselkedés téma. Mint ahogy a data-binding sem az, amikor két nyelv közti adatcserét deklarálsz, lásd angular vagy knockout.js.
-
martonx
veterán
válasz
fordfairlane #3922 üzenetére
"Nem azt írtam, hogy az elemek onevent attribútumainak használata jó, csak annyit, hogy van benne logika, és tisztességes implementációnál azt attribútum-eventbinddal nincs semmi gond."
Nem értek egyet. Így 2014-ben a html-be belefosott js eseménykezelő abszolút védhetetlen. Lehet 1-2 eset, amikor tudatosan generálunk pár js változót a html kimenetbe (mondjuk egy user role esetében felesleges azért egy külön ajax hívást indítani, csak hogy lekérjük a szerverről a user csoportját), de az onclick, on.... esetek használata szvsz védhetetlen. Régen ez így volt, HTML5 előtt (pontosabban jquery előtt) érthető is volt, mert egy class-al azonosított html elemre esemény kezelőt kötni fájdalmas volt, ha az a class szerepelt X darab html elementnél, és mindre rá akartad kötni ugyanazt az eseményt.
Aztán jött a jquery és már HTML4-ben is normálisan felépített szeparált kódokat lehetett felépíteni vele kliens oldalon. Nem vagyok az a típus aki design patternek megvalósításától élvez el, de minimum alap követelmény a különböző kódok szeparálása. Ráadásul a külön js-ekbe kiemelés az oldal betöltődésének is kedvez.
-
CSorBA
őstag
Én köszönöm a segítségeket, hasznosak voltak. Ha valami nem lenne tiszta esetleg gyakorlatban még, akkor úgyis kérdezek
-
Sk8erPeter
nagyúr
válasz
fordfairlane #3922 üzenetére
Mit tekintünk ez esetben "tisztességes implementációnak"?
"Az, hogy te mit tartasz jónak, meg logikusnak, meg karbantarthatónak, az ezen a véleményemen nem fog változtatni."
Te ezek szerint nem tartod karbantarthatóbbnak a szeparált JS-kódot?
Igazából te sem fogsz változtatni a véleményemen, mert szerintem ettől még továbbra is rontja a karbantarthatóságot, és még ha régen én is csináltam ilyesmit, ma már inkább nem követnék el ilyen merényletet, csak nagyon kihangsúlyoztad, hogy ezt csak én gondolom így. Pedig a korábban belinkelt cikk is pontosan ennek a kutyulódásnak a negatív hatásait fejtegeti röviden.===========
Más: össze kéne már gyűjtenünk közös erővel olyan linkeket, amiket bedobhatnánk a téma-összefoglalóba. Szóval ha van olyan cikk, amit jónak tartotok, és kapcsolódik a JavaScripthez, akkor dobjátok be plíz!
-
fordfairlane
veterán
válasz
Sk8erPeter #3921 üzenetére
Ezzel nyugodtan alá lehetne támasztani azt is, hogy formvalidálásnál minden egyes inputra külön-külön dobjuk be mondjuk onblurre a validáló függvényt. Vagy akkor ez ne legyen, csak egyszer, magán a form csomóponton legyen egy onsubmit-attribútumba bedobott függvénynév, mert az épp a határon mozgolódik a tákolmány és a karbantartható kód között? Érted, ezzel a hozzáállással (mondjuk ha valaki ilyen tutorialt ír) a kezdők is kedvet kaphatnak hozzá, hogy na, akkor ilyen alapon mehet minden az attribútumokba, mert azt írták, hogy jó az, és akkor ránézek a HTML-kódra, és tök jó, hogy egyben látom a JavaScript-kódot is. De akkor ugyanígy nem lenne helytelen az sem, hogy valaki style-attribútumban határozza meg az adott elem kinézetét. Az sem magyarázható, bár elméletileg ezen az elven az is jó lehetne, mivel akkor tök jó, hogy helyben látja az illető, hogy fog kinézni az elem.
Nem azt írtam, hogy az elemek onevent attribútumainak használata jó, csak annyit, hogy van benne logika, és tisztességes implementációnál azt attribútum-eventbinddal nincs semmi gond. Az, hogy te mit tartasz jónak, meg logikusnak, meg karbantarthatónak, az ezen a véleményemen nem fog változtatni.
-
Sk8erPeter
nagyúr
válasz
martonx #3918 üzenetére
Hát ja. Kezdőnek egyértelmű, hogy bűn jQuery-vel kezdenie, mert később már nem fogja akarni megtanulni, milyen munkafolyamatot is egyszerűsít le.
Mondjuk szerencsére a 11-es verzió óta már az IE sem számít annyira szitokszónak, mint régen (még ha a felhasználói felület ostoba is még mindig), így ritkul az, hogy böngészőspecifikus baromságokat kelljen tákolni (lásd az IE-specifikus attachEventet régről az addEventListenerrel szemben), ezért a plain JavaScript is talán használhatóbbá kezd válni, mint régen, ami egyébként vicces helyzet, de azért még mindig sokat segít a cross-browseresítésben a jQuery... aztán az megint egy következő szint, hogy valaki értse, hogy a $('#test') és document.getElementById('test') hiába hivatkozik ugyanarra az elemre, attól még az első egy jQuery objectet ad vissza, a másik pedig egy Element objectet...
Persze mindezek értéséhez/sejtéséhez először is tudni kellene használni a dokumentációkat, ami ahogy a topicokban észreveszem, sajnos cseppet sem magától értetődő. Meg hát érted, majd a fórumon a srácok megmondják...(#3919) cSuwwi :
Sztem azért nem kopik ki, mert az onclick és többi hasonló attribútumot eleinte gyorsabb bepötyögni egyből az elemhez, és meglátni, hogy mi történik - ez a tanulási fázisban még az elfogadható érvek közé tartozik, én is így kezdtem, csak van, aki aztán megragad ezen a szinten, és azt mondja, hogy de hát így könnyebb olvasni, és egyből tudom, hogy ahhoz az elemhez milyen eseménykezelő tartozik. Na ez egy baromság. Sokkal nehezebb karbantartani egy ilyen széttákolt kódot. Eleve ott kezdődik, hogy mindegyik nyelvnek legyen meg a maga jól körülhatárolható felelőssége, ne legyen szétgányolva a JS-kód CSS-sel vagy HTML-lel se. A PHP-kódban se legyen lehetőleg stringként inline behányt JavaScript-kód. Meg hasonlók. Persze vannak fejlesztők, akik ezekre is megtalálják az önigazoló magyarázatokat, de nem ők csinálják jól.Szerintem erről ez egy nagyon jó összefoglaló diasor:
Refactoring to Unobtrusive JavaScript
http://www.slideshare.net/fgalassi/refactoring-to-unobtrusive-javascript
(lehet, hogy meg is kérem, hogy ezt tegyék be az 1. hsz.-be, csak hogy mindenkinek szem előtt legyen, nagyon tömören elmagyarázva, mit, hogyan kéne)Na meg amúgy a net tele van szemétrevaló tutorialokkal is, amik a rossz szokásokat verik az emberek fejébe.
=====
(#3920) fordfairlane :
Kicsit később küldtem el, mint Te, mert kotorásztam a belinkelt diasor után, így csak most látom, amit írtál, de közben Te is azt a szempontot írod, hogy látod magánál az elemnél, hogy hozzá van kötve az eseménykezelő, és az jó... de ne már.
Ezzel nyugodtan alá lehetne támasztani azt is, hogy formvalidálásnál minden egyes inputra külön-külön dobjuk be mondjuk onblurre a validáló függvényt. Vagy akkor ez ne legyen, csak egyszer, magán a form csomóponton legyen egy onsubmit-attribútumba bedobott függvénynév, mert az épp a határon mozgolódik a tákolmány és a karbantartható kód között? Érted, ezzel a hozzáállással (mondjuk ha valaki ilyen tutorialt ír) a kezdők is kedvet kaphatnak hozzá, hogy na, akkor ilyen alapon mehet minden az attribútumokba, mert azt írták, hogy jó az, és akkor ránézek a HTML-kódra, és tök jó, hogy egyben látom a JavaScript-kódot is. De akkor ugyanígy nem lenne helytelen az sem, hogy valaki style-attribútumban határozza meg az adott elem kinézetét. Az sem magyarázható, bár elméletileg ezen az elven az is jó lehetne, mivel akkor tök jó, hogy helyben látja az illető, hogy fog kinézni az elem. -
fordfairlane
veterán
vajon miért nem kopik ki a köztudatból
Mert egyszerű, és mert szemantikailag nem olyan rossz az (félig jó
). Látod magánál az elemnél, ha van hozzá kötve eseménykezelő.
Az már kevésbé jó, hogy az on(event) attribútumba nem egyszerűen metódusnevet írsz, amit a javascript hozzáköthet az adott elemhez, hanem gyakorlatilag komplett scriptet rakhatsz bele inline.
-
cSuwwi
senior tag
válasz
Sk8erPeter #3917 üzenetére
attachEvent-re gondoltam csak régen volt már nem ugrott be
bind, on, live megvolt, többi sose kellettohh, nagyon sok oldalon van még most is inline js event, nem csak kezdőknél/kis siteokon
vajon miért nem kopik ki a köztudatból?a sok on-al nincs gondom, csak nem fogalmaztam jól sry
-
martonx
veterán
válasz
Sk8erPeter #3917 üzenetére
Nekem érthető volt. Ilyenkor derül ki, hogy az emberek használják a jquery-t, mert az milyen jó már, de mennyire nem értik a mögöttes folyamatokat.
-
Sk8erPeter
nagyúr
válasz
martonx #3915 üzenetére
Most miért?
Amúgy meg ő kérdezte, hát akkor kapott rá választ.
Bár most így hirtelen nem jön le, mi a magyarázatomból az érthetetlen, de majd megírja.
(#3916) cSuwwi :
.bind() volt már 1.0-tól, .live() 1.3-tól, meg .delegate() volt 1.4.2-től... 1.7 után szerencsére már egységesen az .on() az ajánlott.lásd a .live() dokumentációjában:
$( selector ).live( events, data, handler ); // jQuery 1.3+
$( document ).delegate( selector, events, data, handler ); // jQuery 1.4.3+
$( document ).on( events, selector, data, handler ); // jQuery 1.7+"jQ előtt az addeventlistener-es megoldások. A click esemény az IE kivételével mindenhol click volt, IE alatt mindenhova kellett az "on" előtag (onclick, onsubmit, ...)."
Nemcsak .addEventListener, hanem .attachEvent az IE miatt, if-else formában..."különböző tagekre ráaggatott eventekkel, onclick buttonoknál, vagy onsubmit formokon"
Aki inline onclick, onsubmit, stb. attribútumokat használ, az meg is érdemli."sok "on" van és mind ugyanaz
"
Azt hogy érted, hogy "ugyanaz"?Azért eléggé más tud lenni a szerepük az eventeknek...
-
cSuwwi
senior tag
pedig még lehetne fokozni.
pl. asszem 1.7 előtt nem volt "on", live-al kellett/illett kezelni, vagy jQ előtt az addeventlistener-es megoldások. A click esemény az IE kivételével mindenhol click volt, IE alatt mindenhova kellett az "on" előtag (onclick, onsubmit, ...).
keverhető még a nem diszkrét js-t használó oldalakon a különböző tagekre ráaggatott eventekkel, onclick buttonoknál, vagy onsubmit formokon.
sok "on" van és mind ugyanaz -
martonx
veterán
válasz
Sk8erPeter #3914 üzenetére
Most jól összezavartad...
-
Sk8erPeter
nagyúr
"Azt hittem valamiért, h. van egy onclick is ami egyenlő az .on("click"-el"
Igen, lényegét tekintve ugyanaz, lásd a jQuery source code-ot a jQuery.fn.click-nél:
http://james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.fn.clickfunction (data, fn) {
return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
}magyarul a jQuery.on() hívódik meg a .click() esetén is, csak nyilván a 'click' paraméterrel. Ugyanígy néz ki például a .dblclick() is ([link]).
A jQuery.on()-nál már láthatsz viszont különbséget, csak kukkants rá:
http://james.padolsey.com/jquery/#v=1.10.2&fn=jQuery.fn.onAz .on() általános eseménykezelő-hozzákapcsoló.
Lehetne akár .on('dblclick', ...) is. Annyi a különbség, hogy a $('#valami, .blabla').dblclick(...) egyértelműen a selectorral kijelölt elemekhez kapcsol egyértelműen megnevezett eseménykezelőt, és itt még nem tudsz átadni selectort, ami szűr azokra az elemekre, amiknek ki kéne váltani az adott eseményt, és ezt a különbséget emeltem ki itt a tbody-tr példánál. Tehát például a .click() nem fog működni AJAX-szal hozzáadott elemekre. -
CSorBA
őstag
válasz
Sk8erPeter #3908 üzenetére
Éreztem én, hogy téged kell megszólítani
Szerintem lassan összedobhatnánk a fórumtársakkal egy sörözést és neked pár sört
Nagyon hasznos leírás, letisztult a kép azt hiszem. Még talán annyi, hogy ugye jQueryben az onclick is valójában .on?
-
Sk8erPeter
nagyúr
válasz
trisztan94 #3909 üzenetére
Hát köszi. Igyekszik a zzember. Legalább később lehet linkelgetni az ilyen válaszokat, ha valaki rákérdez, és akkor egy csomó időt megspóroltam vele, hogy a megírása kicsit pöcsölős volt.
-
trisztan94
őstag
válasz
Sk8erPeter #3908 üzenetére
Hihetetlen, hogy milyen kidolgozott profi válaszokat tudsz adni, kb. mindenkinek aki legalább felig ertelmes kerdest tesz fel, le a kalappal. Tenyleg.
-
Sk8erPeter
nagyúr
Hi! Az események buborékszerű felszivárgásáról itt írtam, belinkelve egy példát:
http://prohardver.hu/tema/weblap_keszites/hsz_10515-10516.html
http://prohardver.hu/tema/weblap_keszites/hsz_10543-10543.htmlAz AJAX-os betöltött elemekre kötött event handlerekre jó példa a jQuery.on(), ahol a "delegated events" rész az érdekes, itt tök jól elmagyarázza a helyzetet (kiemeltem a nagyon fontos részeket):
"Delegated events have the advantage that they can process events from descendant elements that are added to the document at a later time. By picking an element that is guaranteed to be present at the time the delegated event handler is attached, you can use delegated events to avoid the need to frequently attach and remove event handlers. This element could be the container element of a view in a Model-View-Controller design, for example, or document if the event handler wants to monitor all bubbling events in the document. The document element is available in the head of the document before loading any other HTML, so it is safe to attach events there without waiting for the document to be ready.
In addition to their ability to handle events on descendant elements not yet created, another advantage of delegated events is their potential for much lower overhead when many elements must be monitored. On a data table with 1,000 rows in its tbody, this example attaches a handler to 1,000 elements:
$( "#dataTable tbody tr" ).on( "click", function() {
alert( $( this ).text() );
});A delegated-events approach attaches an event handler to only one element, the tbody, and the event only needs to bubble up one level (from the clicked tr to tbody):
$( "#dataTable tbody" ).on( "click", "tr", function() {
alert( $( this ).text() );
});[...]
Attaching many delegated event handlers near the top of the document tree can degrade performance. Each time the event occurs, jQuery must compare all selectors of all attached events of that type to every element in the path from the event target up to the top of the document. For best performance, attach delegated events at a document location as close as possible to the target elements. Avoid excessive use of document or document.body for delegated events on large documents.
jQuery can process simple selectors of the form tag#id.class very quickly when they are used to filter delegated events. So, "#myForm", "a.external", and "button" are all fast selectors. Delegated events that use more complex selectors, particularly hierarchical ones, can be several times slower--although they are still fast enough for most applications. Hierarchical selectors can often be avoided simply by attaching the handler to a more appropriate point in the document. For example, instead of $( "body" ).on( "click", "#commentForm .addNew", addComment ) use $( "#commentForm" ).on( "click", ".addNew", addComment )."
Itt tehát a példában az eseménykezelőt a tbody-ra kötötte, ahelyett, hogy az összes tr-re tette volna ugyanezt, így az eseménynek csak pontosan egy szintet kell buborékszerűen felúsznia, a klikkelt tr elemből a tbody felé.
Ide felraktam egy egyszerű példát:
http://jsfiddle.net/Sk8erPeter/Tpc3k/
itt például gombokat adok hozzá egy container elemhez. Az első példában csak az első gomb "reagál" (dob alert() ablakot), mert konkrétan a kód lefutásának pillanatában jelenlévő button elemre kötöttem az event handlert; a második esetben viszont amikor hozzáadok újabb gombokat, azok is dobnak alert()-ablakokat, hiszen ott azt határoztam meg, hogy a szülőelemre legyen kötve az event handler (egyébként itt a lényeg a hierarchia, nem az, hogy közvetlen szülőeleme legyen!), és megadtam egy selectort is (ami a "button"), hogy a leszármazott elemek közül ezekre szűrjön az eseménykezelés során, ezek triggereljék a click eseményt.
Lásd a doksiban a leírást a selectorra:
selector
Type: String
A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element.Tehát a különbség:
első:
$container1.find('button').on('click', function (event) { ... } );
második:
$container2.on('click', 'button', function (event) { ... } );Remélem, nagyjából érthető, ha valami nem tiszta, mert bonyolultan írtam, kérdezz nyugodtan
-
CSorBA
őstag
válasz
martonx #3905 üzenetére
A másik típusú gond ott kezdődik, hogy eseményt kötni csak MEGLÉVŐ elemekre lehet, olyanokra nem amiket ajax-al utólag fogsz beszúrni valahova, és az esemény handler létrehozásakor még sehol sincs.
Ekkor sincs gond, csak éppen más módszerrel kell lekezelni ezeket az eseteket.
Köszi a választ, viszont pont ez az utóbbi dolog érdekelne. Erre példát, példákat tudna hozni valaki?
-
martonx
veterán
A dolog egyrészt egyszerű, másrészt nem.
Van ugyebár a DOM-unk, aminek egy MEGLÉVŐ elemén ha elsül valahol egy esemény, az szépen elkezd fölfelé "bugyogni" a szölő elemein végig.Feladat tud lenni, ennek a felfelé bugyogásnak a megszüntetése, mert nem várt mellékhatásokat okozhat. Pl: egy formot ajaxosan akarsz elküldeni. A submit gomb click-jére feliratkozva hiába csinálsz valamit, ha az esemény tovább bugyog, és végül a default böngészős viselkedés fog elsülni rá, azaz elnavigál az oldal a Form url-jére. Ekkor a click elkapásakor egyúttal meg kell szüntetni a tovább bugyogást is.
A másik típusú gond ott kezdődik, hogy eseményt kötni csak MEGLÉVŐ elemekre lehet, olyanokra nem amiket ajax-al utólag fogsz beszúrni valahova, és az esemény handler létrehozásakor még sehol sincs.
Ekkor sincs gond, csak éppen más módszerrel kell lekezelni ezeket az eseteket.
-
CSorBA
őstag
Sziasztok!
Egy kis segítséget kérnék, és ha szabad így megszólítanom Sk8erPeter fórumtársat, akkor az Ő hozzászólására kiemelten számítok
Szóval a Javascript bubbling and capturing-ról tudnátok mesélni? Kicsit zavarosan az angol leírások. Akár jquery példát hozva, valaki el tudná magyarázni, hogy ez miért jó? Miért és hogy jobb szülőre bindelni eseményt? - Ha jól tudom ezt ajaxos betöltődésnél lehet kihasználni, hogy nem kell újrabindelni a bekért DOM elemekre, hanem elég egy szülőre. De ez gyakorlatban hogy valósul meg, leginkább ez érdekelne.
-
Bogjas
újonc
Köszönöm Uraim a véleményeket!... a feladat megoldva ... viszlát
-
fordfairlane
veterán
válasz
Sk8erPeter #3901 üzenetére
Így van, ez továbbra is értelmezési probléma, nem szoftverfejlesztési. Amíg nem tudja leírni érthetően, mit szeretne, addig nincs értelme implementációs részletekkel foglalkozni. Ő is vaskosan keveri a két dolgot, volt itt "script", meg gif, meg jpg izé, épp csak a lényeget nem tudjuk. Azaz, hogy mit lásson a felhasználó az adott oldalon, és milyen interakciókat végezhessen el.
-
Sk8erPeter
nagyúr
válasz
tilla23 #3899 üzenetére
[link] - itt megkérdeztem, a naptár napjaira fog-e kattintani a felhasználó, tehát a napok legyenek-e belinkelve, de azt írta, "Nem a látogató választja a linket és nézi meg azt vagy azt az oldalt, hanem készen kapja az előre megírt szöveget, adatokat." Fogalmam sincs, ez mit jelent. Sajnos a leírásnak ebben a formában nem sok értelme van, ember legyen a talpán, aki ilyen specifikációból kihámozza, pontosan mit is kell csinálni.
Amennyit összeraktam az egész kívánságából, az alapján továbbra sem értem, az egész feladatnak mi köze van a JavaScripthez. Szerintem nem a kliensoldali részét kellene megvalósítania, hanem a szerveroldali sem néz ki még sehogy.
Új hozzászólás Aktív témák
Hirdetés
- LG 27UN83A-W - IPS LED - 3840x2160 4K - 60Hz 5ms - USB Type-C - HDR 400 - AMD FreeSync - Hangszórók
- HIBÁTLAN iPhone 14 Pro 128GB Deep Purple -1 ÉV GARANCIA - Kártyafüggetlen, MS3102
- Xbox Game Pass Ultimate kedvező áron, egyenesen a Microsoft-tól! - AUTOMATA BOLT
- HP 15 Zbook Studio G8 FHD IPS i7-11850H vPro 32GB 512GB SSD Nvidia A2000 Studio Win11 Pro Garancia
- RAKTÁRSÖPRÉS!!! - Videókártyák, Monitorok, Notebookok, Stb. - Szaküzletből! Számlával!
Állásajánlatok
Cég: FOTC
Város: Budapest