Hirdetés
- AMD GPU-k jövője - amit tudni vélünk
- Philips LCD és LED TV-k
- Azonnali fotós kérdések órája
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Projektor topic
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Kormányok / autós szimulátorok topikja
- AMD Navi Radeon™ RX 7xxx sorozat
- Milyen billentyűzetet vegyek?
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Új hozzászólás Aktív témák
-
szmegma
aktív tag
if(preid != postid){
$(".dt").hide();
//alert(postid+"|"+preid);
}Akarmire kattintok preid SOHA nem lesz egyenlo postid-vel mivel a slide resz az elsebe kerult. Ahhoz, hogy az else ag igaz legyen legalabb egyszer igaznak kellene lennie az else agnak... odogi korbe tettem a kodot...
Abszolut elvesztettem a fonalat. -
jeges
senior tag
de igazad van.
azt nem látom a kódban, hol vizsgálod, hogy display:none igaz-e.
a korábban megbeszéltek szerint akkor kell futtatni a slide-okat, ha
1) az each-ben ahhoz az elemhez értünk, amelyikre klikkeltünk - ez a két id összevetése
2) éppen nincs végrehajtás alatt a kód --> display nem "none"ez alapján a slide-os részt az else ágon belül még egy elágazásba kellene tenni
if ($(this).css("display") == "none"){...} -
szmegma
aktív tag
Amit irsz az tiszta es ertem.
El is keszitem igy a kodot:<script type="text/javascript">
$(document).ready(function() {
var yOffset = 15;
var xOffset = -23;
$(".dt").hide();
$(".help").click(function(e){
var preid = $(this).attr("id");
var proid = preid.split('-');
var id = proid[1];
$(".dt").each(function(){
var postid = $(this).attr("id");
if(preid != postid){
$(".dt").hide();
//alert(postid+"|"+preid);
}
else{
return false;
}
});
$("#f"+id).css("top", "12px").css("left", "-9px").css("position", "absolute").css("z-index", "9999");
$("#i-"+id).css("top", (e.pageY + xOffset)+"px").css("left", (e.pageX + yOffset)+"px").slideDown("slow").delay(2000).slideUp("slow");
});
});</script>Megsem mukodik. Szerintem a $("#f"+id).css("top", "12px").css("left", "-9px").css("position", "absolute").css("z-index", "9999");
$("#i-"+id).css("top", (e.pageY + xOffset)+"px").css("left", (e.pageX + yOffset)+"px").slideDown("slow").delay(2000).slideUp("slow"); resz a baja, hogy nem az each function-on belul van es miutan az lefutott ezek mindenkeppen lefutnak attol fuggetlenul, hogy mi jott vissza az each-bol.
Tevedek? -
jeges
senior tag
a legegyszerűbb valszeg az lenne, ha a h != id helyett
preid != $(this).attr(id) - t írnál
ez a feltétel azt jelenti, hogy a klikk célelem és az each-ben éppen vizsgált elem id-je egyezik
ha ez a feltétel nem teljesül (azaz a klikkelt elemnél járunk az each-ben), és a vizsgált elem display-e nem none, az azt jelenti, hogy végrehajtás alatt van a kód. ebben az esetben meg kell szakítani a futást (azaz return false -
jeges
senior tag
erre megoldás amit fent írtam: katt-ra adsz egy spec class-t a kinyitott elemnek, és azt vizsgálod. id-t is lehet, de a class valamivel rugalmasabb, kevésbé csúf, ha mondjuk törlöd, mint id esetében.
szerk: nézegettem is a kódot, hogy vajon mi az a h változó a névtelen függvényben
-
szmegma
aktív tag
Ezzel ugyan ugy nem mukodik es igy problema jelenik meg:
mondjuk nyitott a 4. box es kinyitom a 7. boxot akkor a 4. box nem tunik el.Szerintem valtozoba kellene tenni a nyitott box ID-jet es azt osszehasonlitani a kattintott ID-vel, nem?
Probaltam a h != id de a h nem a nyitott box ID-jet tartalmazza, igy az if<>else ag is ertelmetlen. -
szmegma
aktív tag
Idaig jutottam el: MEGTEKINTES
Jelenleg egy problema kivetelevel mukodik rendesen. Az a bajom, hogy amikor kattintok mondjuk a 4. kerdojelre es megjelenik a 4. box tartalma, ujboli kattintas a 4. kerdojelre azt eredmenyezi, hogy eltunik egy idore a 4. box tartalma de ujbol megjelenik, majd a delay() miatt ismet eltunik.
Hogyan lehetne ezt megakadalyozni, hogy ha nyiott cuccra kattintok akkor az szimplan tunjon el es ne pedig a kodot futtassa?
Probaltam valtozoba helyezni a nyitott box ID-jet de nem sikerult. -
jeges
senior tag
1 a hide() utáni 2 sor szinte biztos felesleges. ha hide-olod az elemet, utána sztem nem kell slidedown+slideup
2 az kavarhat még be, h else ágon van a slidedown+slideup. else helyett az .each utánra tenném, mert csak egyszer akarod végrehajtani.összefoglalva az .each-be csak a hide kell sztem, az eredeti slide-ok az each után külön egyszer végrehajtva.
-
martonx
veterán
jeges az each funkciót az ellenőrzésre értette.
Ami jó is, csak te most már kevered a szezont a fazonnal.
1. Ellenőrizd le, hogy melyik elemre ment a kattintás, ezt még az each előtt (ezt meg is tetted).
2. Majd jöhet az each, ahol először is vesd össze, hogy az adott elem amiben éppen azeach tart az a kattintott-e, vagy sem.
Ha nem a kattintott, akkor tüntesd el a képet, ha pedig pont a kattintott az, akkor jelenítsd meg a képet.Szóval nálad most ez az ellenőrzés hiányzik, mert ami ellenőrzésed van az hülyeség.
-
szmegma
aktív tag
-
jeges
senior tag
nos, nem véletlen, h visszakérdeztem, mer' nem volt egyértelmű, mi okozza a problémát. a kód egyébként bizonyosan tudni fogja, hogy nyitva van-e, ha megkérdezed tőle. pl:
$(".help").each(function(){
if($this.css("display") != "none"){ ... }
});vagy (ha pl nem szereted az .each() -t) hover-re adsz az elemnek egy "hover" (vagy akármilyen) class-t, és azt használod
$(".help").bind("mouseover",function(){ $(this).addClass("hover"); });
$(".help").bind("mouseout",function(){ $(this).removeClass("hover"); });így a fenti helyett:
$(".help").not(".hover").prev().css("display","none"); -
szmegma
aktív tag
Bocsi a kesoi valaszert.
Mint irtam probalkoztam a setTimeout() fuggvennyel de nem teljesen ugy mukodik ahogy elvarom.Keszitettem egy teszt oldalt: [link]
Itt lehet probalgatni hogy mi miert nem mukodik. Ez pontos masa az eredetinek.
------------------------------------------------------------------------------------------------------------
A $(this).delay(5000).hide(); reszt is probaltam, ekkor pedig a slideToggle hal meg.
------------------------------------------------------------------------------------------------------------
A var id2hide var id2show resz nem tudom mire lenne jo nekem az eltuntetesben? Mivel ha vki kattint mondjuk az 5. boxra majd a 2. boxra ez a kod nem fogja tudni, hogy az 5. box nyitva van.
------------------------------------------------------------------------------------------------------------Lehet rossz helyre teszem a setTimeout() reszt es azert nem kepes mukodni?
-
jeges
senior tag
mi okozza a problémát az eltüntetésben? logikailag a már megírt algoritmus használható némi kiegészítéssel:
var proid = $(this).attr("id").split("-");
var id2hide = ( (proid[1] * 1) == 1 ) ? 0 : 1;
var id2show = 1 * proid[1];ahogy megjeleníted a két elemet, úgy a másik kettőt el is tudod tüntetni.
-
Peter Kiss
őstag
-
szmegma
aktív tag
JQUERY KOD:
$(document).ready(function() {
var yOffset = 9;
var xOffset = -25;
$(".dt").hide();
$(".help").click(function(e) {
var preid = $(this).attr("id");
var proid = preid.split('-');
var id = proid[1];
$("#f"+id).css("top", "2px").css("left", "-9px").css("position", "absolute").css("z-index", "9999");
$("#i"+id).css("top", (e.pageY + xOffset)+"px").css("left", (e.pageX + yOffset)+"px").slideToggle("slow");
});
});HTML KOD:
<dt class="dt" id="i0"><img id="f0" src="_/arrow.png">EZ A SZOVEG JELENIK MEG KATTINTASRA</dt><img class="help" id="m-0" src="_/help.png">
<dt class="dt" id="i1"><img id="f1" src="_/arrow.png">EZ A SZOVEG JELENIK MEG KATTINTASRA</dt><img class="help" id="m-1" src="_/help.png">Sziasztok! Keszitettem egy kattintasra elotuno, ujabb kattintasra eltuno scriptet. Ket problemam van:
1, Amikor kattintok es megjelenik a szoveg, akkor ha egy masik hasonlo gombra kattintok es az a szoveg resz is megjelenik nem tudom eltunteni az elozot. A lenyeg, hogy MINDIG csak az a szoveg legyen lathato amelyikre utolsonak kattintottam es ezzel egyidoben tuntesse el az elozot.
2, Amikor kattintok es megjelenik a szoveg, kellene vmi idolimit, hogy ha nem kattint, hogy tunjon el, akkor is tuntesse el mondjuk 5 masodperc utan.A masodik problemamat probaltam setTimeout() fuggvennyel legyozni, de csak fel sikert ertem el: setTimeout("$('.dt').fadeOut();", 5000);
Elsore mukodik, de ha ujbol kattintok ugyan arra a gombra akkor amint megjelenik a szoveg, azonnal el is tunik.Szoval a segitsegeteket kerem, hogyan oldhato meg a fenti ket problema?
Elore is koszonom. -
jeges
senior tag
válasz
Brown ügynök #180 üzenetére
"hogyha mégsem választ ki egy sablonnevet, a begépelt szöveg ne tűnjön el a sablonnév inputból."
ha jól értem, a sablonnev inputot nem üríti a korábban írt kódrészleted, csak a template-et.
mindegy, sztem ez a három lehetőség van alapvetően:
1) ha a sablonnev változót vizsgálod:
if(sablonnev != undefined && sablonnev != "")$('#template').val(sablonnev);
2) ha a sablonnev id-jű inputot akarod vizsgálni:
if($('#sablonnev').val() != "")$('#template').val( $('#sablonnev').val() );
3) ha a sablonnev változóban tárolt id-jű inputot vizsgálod:
if($('#' + sablonnev).val() != "")$('#template').val( $('#' + sablonnev).val() );
-
Brown ügynök
senior tag
Nem jelez hibát.
@Athlon64++: Nem működik. Egyébként másik fv. esetében müködik a következő szisztéma: function fillTemplate(sablon, sablonnev){
$("#template").val(sablonnev);
}@jeges: A sablon és a sablonnev a visszakapott adat, ergo a változó.
Szerk: $("#template").val(sablonnev); Ez idáig működik. Már csak azt szeretném, hogyha mégsem választ ki egy sablonnevet, a begépelt szöveg ne tűnjön el a sablonnév inputból.
-
jeges
senior tag
válasz
Peter Kiss #177 üzenetére
ill még egy kieg:
sablonnev (csak számomra?) nem egyértelmű, h maga az input vagy egy változó. a válasz ill a felépítés függvényében kellhet elé a megfelelő kijelölő jel (# vagy .) -
Peter Kiss
őstag
válasz
Brown ügynök #175 üzenetére
onblur-ra paraméter nélkül hívod meg a függvényt, miért is rakna be bármit is, ha mindkét paraméter undefinied?
Másik tipp:
$val = $(sablonnev).val();
if ( $val == ""){
$("#template").val();
}
else{
$("#template").val($val);
}Helyett:
$("#template").val($(sablonnev).val()); -
martonx
veterán
válasz
Brown ügynök #175 üzenetére
F12 mit mutat?
-
Brown ügynök
senior tag
A következő a felállás: Két értéket kell behelyezni az ajax által visszaadott válaszból. Azt szeretném, ha onblur hatására szépen lefutó fv. a sablonnevet is behelyezné az inputba, amit most valamiért nem tesz meg.
Ha a sablonnev üres, akkor nem bántaná az input mezőt (tehát a begépelt szöveg megmaradna), ellenben kitöltené a visszakapott értékkel. Ez mintha már működött volna, most leellenőriztem és nem rak be semmit.
<input onblur="fillTemplate();" id="template" />
function fillTemplate(sablon, sablonnev){
$('iframe').first().contents().find('body').append(sablon);
$val = $(sablonnev).val();
if ( $val == ""){
$("#template").val();
}
else{
$("#template").val($val);
}
setTimeout("$('.suggestions').hide();", 200);
} -
Brown ügynök
senior tag
válasz
Peter Kiss #172 üzenetére
Ez lenne a legegyszerűbb megoldás. De a probléma túl összetett.
Van egy Postgres adatbázis SQL-ASCII kódolással. Van egy vállalatirányítási rendszer Delphiben, és lenne egy egy E-busniess felület amit most csinálok. Nos, az adatbázist dumpolom LATIN9-be. Ezt beillesztem egy UTF8 adatbázisba és akkor nagyjából működika webes rész. Igen ám, de a Delphi nem szereti valamiért ezt az adatbázist: invalid byte sequence for encoding utf8.
Arra gondoltam, először megpróbálom webes oldalról megoldani, de lehet hogy a Delphiben kellene valamit csinálni.
@jeges: Az adatbázis a "kezemben" van.
-
jeges
senior tag
válasz
Brown ügynök #169 üzenetére
milyen adatbázis? mennyire vannak a kezedben a beállítások?
(csak zárójelben: ez valami migrációs probléma?) -
Peter Kiss
őstag
válasz
Brown ügynök #171 üzenetére
Ehh, valóban.
Erre marad megoldásnak az, hogy szerveroldalon beveted az iconv()-ot, vagy urlencode-olsz kliensoldalon, szerveren meg dekódolsz. (Ezzel is van egy kicsi probléma, iconv() ajánlottabb.)Ettől függetlenül nem árthat megnézni a fentieket (önmagukban megoldást nem nyújtanak a problémádra sajnos), mert néha későn jön rá az ember, hogy valahol el van tolva a dolog.
Ami az ultimate megoldás lenne, az az adatbázis átborítása UTF-8-ba (meg minden másé). Nekem is azért nem volt szem előtt ez a jQuery "megjegyzés", mert weben már UTF-8 a menő, főleg a MySQL 5 óta (HUN collation).
-
Brown ügynök
senior tag
válasz
Peter Kiss #170 üzenetére
Igen, de itt nem azt írja, hogy utf8-ban küldi az adatokat amit dekódolnom kell?
Data will always be transmitted to the server using UTF-8 charset; you must decode this appropriately on the server side.
-
Peter Kiss
őstag
válasz
Brown ügynök #169 üzenetére
Ha szerveroldalon tolsz ki header-ben kódolást, akkor azt módosítsd.
Ha a HTML <head> részében meg van adva a kódolás, módosítsd. (És máshol is, pl.: XML)
Az összes fájl (.htm, .html, .php, js, .css, miegymás) karakterkódolását állítsd át latin2-re UTF-8-ról (Notepad2, Notepad++).Ennyi lenne.
-
Brown ügynök
senior tag
Előzmény
Akkor folytassuk itt.Itt hova tegyem a kódolást és mit használjak?
$('#cikkszam_s').keyup( function() {
if ( $('#cikkszam_s').val().length == 0) {
// Elrejtjük az ajánlást
$('#suggestions').hide();
} else {
var $cikkszam = $(this).val();
var $url = $("#searchAjaxProNum").val();
$.post($url, {cikkszam: $cikkszam},
function(data){
if(data.length > 0) {
$('#suggProduct').show();
$('#autoSuggProduct').html(data);
}
});
}
}); -
jeges
senior tag
válasz
Speeedfire #167 üzenetére
én azt mondom, minél egyszerűbb, annál jobb. ha már működik, lehet vele figurázni (fent már írt hasonlót valaki). ez pl egyszerű de nagyszerű, nem köll hozzá js se, csak css. és ha működni fog, még mindig slide-olhatod a megfelelő elemeket.
-
jeges
senior tag
válasz
Speeedfire #165 üzenetére
hja, látom.
az viszont esetleg lehet válasz az elcsúszásra, hogy a te tesztoldaladon minden li a sor elején van, az eredetiben pedig sorban egymás után. a float:left hiányzik nálad, ettől sorakoznak fel egymás mellé a li tag-ek.(azt továbbra sem értem, mi szükség erre a rengeteg ul-ra.)
-
Speeedfire
félisten
válasz
Peter Kiss #163 üzenetére
De js nélkül nem is látom ezeket az elemeket. Nem tudom mi lenne az elegánsabb megoldás, ami praktikus is.
jeges: A forrás szerint mindegyik külön ul között van. -
jeges
senior tag
válasz
Speeedfire #159 üzenetére
nem merültem el nagyon a kódban, de számomra legalábbis meglepő az a megoldás, hogy a menüsoron minden li elemnek saját ul-ja van. biztos, hogy ez volt az elképzelés? első blikkre azt gondolnám, egy legördülő menünek egy ul-ban vannak li tagjai, és az almenük ezeken belül további ul, ill li tagok szoktak lenni. nagyjából így:
<ul>
<li><a></a></li>
<li><a></a></li>
<li><a></a></li>
</ul>persze lehet, hogy én néztem el valamit.
a fenti ul-ok egyébként is valami miatt 0*0 pixelesek, ez sem biztos, hogy így kóser, de csak találgatok.
ennél mindenesetre láttam már egyszerűbb megoldást, számomra fura ez a plusz li tag beszúrás, mer' úgy tűnik, feleslegesen piszkálja a program a dom-ot.
-
Peter Kiss
őstag
válasz
Speeedfire #162 üzenetére
Az ilyen hibákra a megoldást az jelenti, he első körben eltünteted a JS kódot, és csak a CSS marad meg. Ha úgy okés, akkor utána lehet effektelni.
-
martonx
veterán
válasz
Speeedfire #159 üzenetére
Ha az Ügyfeleinknek, és a Leendő Ügyfeleinknek menük lenyílására gondolsz FF6 alatt teljesen szépen működnek.
Nem valami böngésző specifikus probléma lesz itt? -
Speeedfire
félisten
Kis jquery gondok van, a neten találtam egy egyszerű jquery kódot a lenyíló menünek. Viszont nem működik megfelelően.
$(document).ready(function(){
$('.dropdown').mouseenter(function(){
$('.sublinks').stop(false, true).hide();
var submenu = $(this).parent().next();
submenu.css({
position:'absolute',
top: $(this).offset().top + $(this).height() + 'px',
left: $(this).offset().left + 'px',
zIndex:1000
});
submenu.stop().slideDown(300);
submenu.mouseleave(function(){
$(this).slideUp(300);
});
});
});Valami miatt nem jó helyen jeleníti meg a lenyílő füleket. Jelenleg kicsit belenyúltam a top és a left definiálásánál, de így csak hd felbontásban van jó helyen. Hogy lehetne megoldani, hogy a megfelelő helyen jelenjen meg?
[A teszt oldal]Illetve ha lenyílik a menü akkor jobbra is elmozdul még, de ezt nem is értem, hogy miért mert a jquery-ben nincs ez deklarálva.
-
Brown ügynök
senior tag
Köszi mindkettőtöknek.
-
Peter Kiss
őstag
válasz
Brown ügynök #155 üzenetére
$('iframe').first().contents().find('body').append('<img src="' + elem + '"/>');
Így használom (majdnem) egy CKEditor-nál képbeszúrásra.
-
jeges
senior tag
válasz
Brown ügynök #155 üzenetére
-
Brown ügynök
senior tag
A képen látható body-ba szeretnék tartalmat írni jQueryvel:
Ezekkel próbálkoztam, de nem ment:
$("#cke_contents_editor").children('body').html(sablon);
$(".cke_show_borders").html(sablon); -
jeges
senior tag
válasz
Peter Kiss #153 üzenetére
erre jó bármelyik másik eseménykezelő eljárás is. ha jq nélkül, simán js-ben definiálsz egy .onclick függvényt, az is el fogja kapni az elem gyerekeinek a click-jeit (hacsak nem akadályozod meg külön a programkódban). erre az "elkapásra" írtam fent példát.
-
jeges
senior tag
válasz
Peter Kiss #151 üzenetére
a magam részéről kicsit általánosabban a bubbling kihasználását értem alatta, azaz hogy nem a célelemen fogom meg az eseményt, hanem a szülőjén. ettől lesz kezelhetőbb, gyorsabb az egész (pl. egy néhányszáz soros rácson ha minden cellára listenert raksz, az baromi lassú, míg egyetlen listenerrel a tábla elemen ugyanaz a hatás elérhető).
szerk: most, h előkerült utánanéztem, és valóban a jq-sok megkülönböztetik a rebinding-et a delegation-től, ahgy Te is írtad.
-
Peter Kiss
őstag
A .bind() nem delegál eseményt, csak a .live() és a .delegate() tudja ezt, legalábbis az én értelmezésemben. Delegálni akkor szoktunk, mikor még nem érhető el az adott elem a contextben. Azt is hozzátenném, hogy a .click() és hasonlók helyett érdemesebb a .live()-ot használni (ha lehet [pl. traversal metódusokat nem lehet használni arra, hogy elemeket keressünk a .live()-nak]), mert gyorsabb, viszont a .live() helyett meg jobb a .delegate() szintén a sebesség miatt, csak utóbbit néha körülményes használni.
---
SpeeedfireSzerintem ez a kód azt csinálja, mint a tiéd, csak rövidebben és gyorsabban.
$(document).ready(function() {
$(".hiremail").focus(function () {
$(this).val('').css('color', '#000').css('border-color', 'green');
})
.blur(function () {
var t = $(this);
if (t.val() == ''){
t.val('email cím...');
}
t.css('color', '#777').css('border-color', '#EEE');
});
}); -
Speeedfire
félisten
Így már tényleg jó a kód.
$(document).ready(function()
{
$(".hiremail").focus(function ()
{
var t= $(this);
t.attr('value',t.attr('value').replace('email cím...',''));
t.css('color', '#000');
t.css('border-color', 'green');
});
$(".hiremail").blur(function ()
{
var t= $(this);
if (t.val() == ''){
t.val('email cím...');
}
t.css('color', '#777');
t.css('border-color', '#EEE');
});
});Ezt az event delegation-t megnézem még. Igazából csak az értékek változnak, a színek már nem, illetve természetesen változik még a vizsgált elem.
-
jeges
senior tag
válasz
Speeedfire #147 üzenetére
nem kell, erre találták ki az event delegation-t
például:
$(document).bind('mouseup',function(e){
// event object
if(!e)e=window.event;//event target
var t = e.eventTarget || e.srcElement;//code
// itt t már az az elem, amelyen a mouseup történt});
a lényeg az lenne, hogy a document is érzékeli az összes elemen történt eseményt, ezért csak egy listener-t regisztrálsz őrajta, ami a fenti módon képes megállapítani, melyik elemen történt az esemény. innen már nem kell minden input-hoz külön eljárást írni, csak egyet a közös szülőjükre.
-
jeges
senior tag
válasz
Speeedfire #146 üzenetére
ha jól értem a kérdést, az esemény-kezelésre vagy kiváncsi. jq-ban több lehetőség is van. egy a sok közül:
$('.tbox').bind('focus',function(){
<code>
});
$('.tbox').bind('blur',function(){
<code>
});(csak arra kell vigyázni, hogy ezek a függvények módosítják a környezetet, azaz függvényen belül a 'this' már a $('.tbox')-ra fog mutatni)
-
Speeedfire
félisten
válasz
Speeedfire #146 üzenetére
Megszültem.
$(document).ready(function()
{
$(".hirnev").focus(function ()
{
var t= $(this);
t.attr('value',t.attr('value').replace('név...',''));
t.css('color', '#000');
t.css('border-color', 'green');
});
$(".hirnev").blur(function ()
{
var t= $(this);
if (t.val == ''){
t.val('value',t.attr('value').replace('','név...'));
}
t.css('color', '#777');
t.css('border-color', '#EEE');
});
});1 hátránya van csak, hogy ezt minden input mezőnél el kell játszani.
-
Speeedfire
félisten
Egy ilyet hogy lehet elegánsan megoldani, hogy ne inline js legyen?
<input class="tbox" type="text" name="search" value="Keresés az oldalon ..." title="Írd be a keresendő szót és nyomj ENTER-t !"
onfocus="if ( this.value == 'Keresés az oldalon ...' ) {
this.value = '';
this.style.color = '#B8B8B8';
this.style.borderColor = '#f90';
}"
onblur="if ( this.value == '') {
this.value = 'Keresés az oldalon ...';
this.style.color = '#B8B8B8';
this.style.borderColor = '#acacac';
}" />Ezzel próbálkoztam, de nem megy.
Ez egy másik projekthez lenne.$(document).ready(function()
{
$(".hirnev").onfocus(function ()
{
var t= $(this);
t.attr('value',t.attr('value').replace('név...',''));
});
$(".hirnev").onblur(function ()
{
var t= $(this);
t.val('value',t.attr('value').replace('','név...'));
});
}); -
jeges
senior tag
válasz
Speeedfire #143 üzenetére
$('#hirnev').css('border', '1px solid red');
upsz, lehet, ez nem megy.
helyette:$('#hirnev').css('borderStyle', 'solid');
$('#hirnev').css('borderColor', 'red');
$('#hirnev').css('borderWidth', '1px'); -
Speeedfire
félisten
Van egy input mező melynek a keretét megakarom változtatni, de nem akarja az igazságot.
$('#hirnev').attr('border', '1px solid red');
Az lenne a lényege, hogy a hirnev id-vel rendelkező mezőnek a keretét átállítja pirosra, de nem akarja.
-
martonx
veterán
ezt is érdemes használni, ha már a kódodat optimalizálod:
-
válasz
Brown ügynök #140 üzenetére
Több ezer sornyi kódnál már nem mind1!
-
Brown ügynök
senior tag
válasz
Peter Kiss #139 üzenetére
Valóban. 1 kb-al csökkent a kód.
-
Peter Kiss
őstag
válasz
Brown ügynök #138 üzenetére
Az 'input' és 'span' szavakat kiveheted a selector-okból, elég a #. Adott lapon azt az ID-t csak egy elem használhatja, nem kell feleslegesen túráztatni az értelmezőt.
-
Brown ügynök
senior tag
válasz
Peter Kiss #137 üzenetére
Igen, már megoldottam.
A végleges fv. így néz ki:
function changePartner1(partner1, id) {
var $selected = $(partner1).val();
var $url = $('input#searchAjaxPartner2').val();
var $span2 = 'partner2'+ id +'';
$.post($url, {partner1: $selected, id: id},
function(data){
if(data.length > 0) {
$('span#'+ $span2 +'').html(data);
}
});
} -
Peter Kiss
őstag
válasz
Brown ügynök #136 üzenetére
<div id="0">-t nem kellene használni.
$(span2).html(data); nem működhet, mert ez van a span2-ben: 'partner2'+ $id
A helyes hívás: $('#' + span2).html(data) -
Brown ügynök
senior tag
Úgy oldottam meg, hogy a 3 menüt befoglaló div id-jét adom tovább és abból képzem le a partner id-ket.
<div id="0">
<span id="partner10">
<span id="partner20">
<span id="partner30">
function changePartner1(partner1, id) {
var $selected = $(partner1).val();
var $id = id;
var $url = $('input#searchAjaxPartner2').val();
var $span2 = 'partner2'+ $id +'';
var $span3 = 'partner3'+ $id +'';
$.post($url, {partner1: $selected, span2: $span2, span3: $span3},
function(data){
if(data.length > 0) {
$(span2).html(data);
}
});
}Most már csak azt kell megoldanom, hogy meg is jelenjen. A $(span2).html(data);- val lesz a gond
-
jeges
senior tag
válasz
Brown ügynök #134 üzenetére
function foo(){
var s = 1;
bar = function(){ return s+1; }
s = bar();
return s;
}
ha meghívod foo()-t, az 2-t fog visszaadni, mert a bar() tudja, hogy s = 1, ehhez ad hozzá még egyet. ugyanezt megteheted az onchange, onclick eseményekkel is, mivel azok is csak függvények. csak arra kell vigyázni, hogy a this mást fog jelenteni, a "kívül" definiált változók belül is használhatók.
szerk: a fenti mintájára pl.
function valami(){
var span2 = document.createElement("div");
span2.id = "span2";
document.body.appendChild(span2);var lm = document.getElementById("elemem");
lm.onclick = function(){
document.body.removeChild(span2);
}}
lm.onclick tudni fogja, mit értesz span2 alatt, mivel azt "kívül" definiáltad már.
-
jeges
senior tag
válasz
Brown ügynök #132 üzenetére
egyébként oda is lehet, de ha jól értem, most erre nincs szükség, hiszen ajax hívással operálsz. úgy értem
<head><script type="text/javascript">obj.onclick = function(){}</script></head>
ehelyett:
<body><div onclick=""></div></body>előbbi esetben sokkal könnyebb követni a változókat szerintem, és könnyebb kihasználni az egymásba ágyazhatóság előnyeit is.
-
jeges
senior tag
válasz
Brown ügynök #130 üzenetére
nos igen, itt sztem meggondolandó, hogy ne inline .onclick-et használj
-
Brown ügynök
senior tag
Ez már tetszene az FF-nek, de a változó nevem mindig más lenne, nem úgy mint eddig:
function changePartner1(partner1, span2, span3) {
var $selected = $(partner1).val();
var $url = $('input#searchAjaxPartner2').val();
var $span2 = $(span2).attr('id');
var $span3 = $(span3).attr('id');
$.post($url, {partner1: $selected, span2: $span2, span3: $span3},
function(data){
if(data.length > 0) {
$(span2).html(data);
}
});
}A span2, span3 be lehet állítani változó nevűre... de az sem jó.
Pontosítok: Ekkor nem adódik át a span2-be span3 -ba a partner20, partner30
-
jeges
senior tag
válasz
Brown ügynök #127 üzenetére
ezek szerint ezt már próbáltad?
<select onchange="changePartner1(this, 'partner20', 'partner30' );" > -
Brown ügynök
senior tag
válasz
Brown ügynök #126 üzenetére
Tehát amikor megváltoztatom az első menű állapotát (changePartner1()) akkor már kész van a span2, span3-ba tölteni kívánt partner20, partner30 span (id).
-
Brown ügynök
senior tag
Az előző válaszomban láthatod, hogy az egy változó érték: span2 helyén span2id, span3 = span3id értékét adom át.
Amikor új partnert szeretnék felvinni akkor létrejön 3 span: partner10, partner20, partner30. Ebben a 3 span-ben van 3 legördülő menücske
. Amikor az első legördülőből választottam, végrehajtódik egy adatbázis lekérdezés és a visszatérő eredményt a partner20 span-en belül, egy legördülő menübe tölti.
Azért kell változó érték mert egyszerre több partnert is hozzáadhatnak és ekkor a span-k id-je változik: partner11, partner21, partner31,
partner12, partner22, partner32 stb. -
jeges
senior tag
válasz
Speeedfire #121 üzenetére
nem a színezés a lényeg, hanem hogy külön lehet definiálni, mit csináljon a cucc, ha sikeres a teszt vagy nem. az eljárások paraméterként megkapják a vizsgált elemet és a json-ban előre definiált (hiba)szöveget, ezzel azt csinálsz, amit akarsz. mindenesetre ha furcsállod a színezést, azér' nézd meg az elemek title-jét ellenőrzés után.
-
jeges
senior tag
válasz
Brown ügynök #120 üzenetére
nem teljesen világos: partner20 lesz az új elem id-je vagy ő maga a div, ami megjelenik? előbbi esetben macskaköröm közé tenném, utóbbi esetben viszont inline kód helyett inkább head-ben definiálnám az onclick-et.
-
Brown ügynök
senior tag
Akkor nem az FF a hibás? Megjegyzem a Chrome-ban működött és mintha FF4-ben is működött volna, erre nem emlékszem. Most FF5 van fent.
A függvény:
Span2, span3 értékek egy korábbi fv.-ből jönnek, melyben így adom meg őket:
var span2 = document.createElement('span');
span2.id = 'partner2'+ pct +'';
var span2id = span2.id;
var span3 = document.createElement('span');
span3.id = 'partner3'+ pct +'';
var span3id = span3.id;function changePartner1(partner1, span2, span3) {
var $selected = $(partner1).val();
var $url = $('input#searchAjaxPartner2').val();
var $span2 = $(span2).attr('id');
var $span3 = $(span3).attr('id');
$.post($url, {partner1: $selected, span2: $span2, span3: $span3},
function(data){
if(data.length > 0) {
$(span2).html(data);
}
});
} -
martonx
veterán
válasz
Brown ügynök #120 üzenetére
ennyiből nehéz megmondani.
Talán ha a changePartner1-et leírnád, mert a hiba nyilván abban lesz. -
Brown ügynök
senior tag
@jeges: Látom nagyon ráérsz.
Nemrég teszteltem IE-re és FF-re egy ajaxos funkciót és sajnos ezeken nem működik (Chrome-n igen).
jQuery vezriószám: 1.6.1
Ha az ügyfél választ a legördülő menüből akkor ez átadja a kiválasztott elemet és egy(-két) id-t (a következő megjelenő legördülő menü id-jét). Így néz ki kb.:
<div id="partner0">
<select onchange="changePartner1(this, partner20, partner30 );" >
</div>partner20 egy id, amivel a következő, megjelenő legördülő mező id-je lesz. Tehát még nem jelent meg de átadom a fv-nek hogy majd ha megjelenik, akkor ez legyen az id-je. A gond az, hogy a FF 5 erre hibát dob vissza: Nincs definiálva a partner20. Pedig az csak egy név, nem is kellene hogy bármit gondoljon róla az FF, majd a js-ben lekérem a hozzá tartozó értéket.
Miért csinálja ezt (velem) az FF 5?
-
jeges
senior tag
válasz
Speeedfire #117 üzenetére
kis segítség:
átírtam úgy, hogy az egyes ellenőrzések futtatása után az eredménytől függően végrehajtandó eljárásokat könnyebb legyen definiálni
(a példába egy egyszerű className-játékot és title-ban megjelenő hibaüzit tettem) -
jeges
senior tag
válasz
Speeedfire #117 üzenetére
én szóltam, hogy nem annyira egyszerű
de legalább működik -
válasz
Speeedfire #112 üzenetére
Milyen dolgot bonyolítok túl, amikor te is ugyanazokat írtad le, amiket én? (szerver, és kliens oldalon is ellenőrzöl).
-
jeges
senior tag
javított, kiegészített kód: formChecker
-
jeges
senior tag
válasz
Speeedfire #112 üzenetére
egy lehetséges megoldás:
html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<title>teszt</title>
<style type="text/css">
#fm {width:500px;display:block;float:left;margin:0; padding:0;}
#fm label, #fm input {display:inline;float:left;position:relative;margin:0 0 5px 5px; padding:0;font:normal 12px Verdana;}
#fm label {width:200px; font-weight:700; text-align:right;}
#fm input {width:250px; text-align:left;}
#send {width:60px !important;font-weight:700 !important;text-align:center !important; margin-left:200px !important;}
#log {width:500px;height:100px;display:block;float:left;position:relative;}
</style>
<script src="rule.js" type="text/javascript"></script>
<script type="text/javascript">
myRule = {
first: {
sbj: "nm",
fnc: "nn",
prm: "",
msg: "A név kitöltése kötelező."
},
second: {
sbj: "yr",
fnc: "gt",
prm: 18,
msg: "Csak 18 év felett."
},
third: {
sbj: "yr",
fnc: "lt",
prm: 99,
msg: "Csak 99 év alatt."
},
fifth: {
sbj: "cn",
fnc: "rg",
prm: ["^hu","i"],
msg: "Csak magyar állampolgárok számára."
},
fourth: {
sbj: "cn",
fnc: "nn",
prm: "",
msg: "Az állampolgárság kitöltése kötelező."
}
}
window.onload = function(){
var sn = document.getElementById("send");
var fm = document.getElementById("fm");
var lg = document.getElementById("log");
sn.onclick = function(){
lg.innerHTML = "";
var fc = new formChecker(fm,myRule);
lg.innerHTML += "out: " + fc.out();
}
}
</script>
</head>
<body>
<form id="fm" name="fm" method="post">
<label for="nm">Name</label><input type="text" name="nm" id="nm" class="nm" value="name" />
<label for="yr">Age</label><input type="text" name="yr" id="yr" class="yr" value="age (years)" />
<label for="cn">Country</label><input type="text" name="cn" id="cn" class="cn" value="country (short, i.e. hu or en)" />
<input type="button" name="send" id="send" value="send" />
</form>
<br>
<div id="log"></log>
</body>
</html>js: (html-ben rule.js-ként hivatkozva)
function gotClass(obj,cl) {
var r = new RegExp("\\b" + cl + "\\b", "i");
var ob = ( typeof(obj) == "object" ) ? obj : $lm(obj);
if ( ob && ob.className && ob.className.match(r) !== null ) return true;
return false;
}
function firstChildofClass(p,cl) {
if (!p || !p.childNodes.length)return;
var ch = p.childNodes;
for ( var i = 0; i < ch.length; i++ ){
if (gotClass(ch[i],cl))return ch[i];
}
return;
}
function $fc(p, cl){
return firstChildofClass(p,cl);
}
function formChecker(fm,rule){
if (!fm) return;
this.fm = fm;
this.rule = rule;
this.res = [];
this.chk = function(){
var r;
for (var i in this.rule){
r = this.rule[i];
if ($fc(this.fm,r.sbj)){
var val = ruleCheck( $fc(this.fm,r.sbj) , r.fnc , r.prm );
if (!val) val = r.msg;
else val = "ok";
document.getElementById("log").innerHTML += "<br>val: " + val;
this.res.push(val);
}
}
}
// output
this.out = function(){
if (this.res.length < 1)this.chk();
var s = "";
for(var i = 0; i < this.res.length; i++ ){
if(this.res[i] != true)s += this.res[i] + "<br>";
}
return s;
}
}
function chk(obj){
this.v = (obj.value) ? obj.value : obj.innerHTML;
this.eq = function(b){
if (this.v == b)return true;
return false;
}
this.lt = function(b){
if (this.v < parseFloat(b))return true;
return false;
}
this.le = function(b){
if (this.v <= parseFloat(b))return true;
return false;
}
this.gt = function(b){
if (this.v > parseFloat(b))return true;
return false;
}
this.ge = function(b){
if (this.v >= parseFloat(b))return true;
return false;
}
this.nn = function(){
if (this.v.toString().length > 0)return true;
return false;
}
this.rg = function(b){
var bb = new RegExp(b[0],b[1]);
return bb.test(this.v);
}
this.exec = function(f, arg) {
var args;
return this[f](arg);
}
}
function ruleCheck(obj,f,prm){
if (!obj)return;
var c = new chk(obj);
return c.exec(f,prm);
}nem állítom, hogy tökéletes, de nagyjából működik
szabályokat json formában várja (ahogy a html-ben látszik)
az ellenőrző függvények persze bővíthetők, most csak néhányat írtam beleha kérdés merül fel, szólj
sry, jq-ban is lehetne, de nem akartam, mer' azér' a néhány getElementById-ért felesleges.
-
Speeedfire
félisten
-
martonx
veterán
sql injection ellen nem az update insert parancsokat kell tiltani, hanem a "--"-t és a ";"-t.
A js alapú XSS támadásokhoz meg (már ha később böngészőben megjeleníted valahol a user által beírt szöveget) a "/>"-t kell tiltani a szövegből.Egy tipikus SQL injection így néz ki ; select * from users --
A ; lezárja a spagetti kódot, a -- kommenteli az utána lévőket, és marad egy szépen végrehajtható sql-ed, amire jó eséllyel választ kapsz.Ha az SQL injection-t és az XSS-t kivédted, akkor már a vérpistikéket (és ez a többség) kivédted. Aki meg nagyon akarja, és elég profi az úgyis feltöri az oldalt.
-
válasz
Speeedfire #107 üzenetére
ha a textarea-ban van egy adott kifejezés akkor error
Ez nagyon jól hangzik, viszont nagyon kicseszel magaddal, ha ezt megjátszod. Milyen kifejezéseket tennél például bele?
Én egy zárt rendszernél mondjuk tiltottam a tipikus SQL kifejezéseket (update, insert, stb.) a felhasználónévből, jelszóból, stb., viszont egy nyilvánosnál ezt nem tudod megjátszani, különben a userek morogni fognak.
Egyébként
public rendszernéla js-en túl php-ban is ugyanúgy ellenőrizni kell mindent.Bár nem hiszem, hogy sokan módosítanák a html-ben ezt.
Már vérpisti szinten is simán megjátszható, hát akkor egy komolyabb cracker...
-
Speeedfire
félisten
milyen típusú ellenőrzésekre gondolsz? mennyire hagysz szabad kezet a felhasználónak, hogy beállíthassa saját ellenőrzéseit?
Konkrétan egy linkkatalógusom van és oda akarok 1-2 dolgot.
pl
-a textarea-ba min. 300 karakter kell
-minden mező legyen kitöltve
-ha a textarea-ban van egy adott kifejezés akkor error (itt valami tömbben lenne felsorolva pár adat)Nagyjából ennyi lenne, illetve ezeket már tudnám kombinálni is. Nem akarom, hogy a felhasználó módosítsa, de gondolom elég lenne ide egy js kódolás, nem kellene rejteni. Bár nem hiszem, hogy sokan módosítanák a html-ben ezt.
-
jeges
senior tag
válasz
Speeedfire #105 üzenetére
ez a téma szép, de ennyire nem egyszerű.
milyen típusú ellenőrzésekre gondolsz? mennyire hagysz szabad kezet a felhasználónak, hogy beállíthassa saját ellenőrzéseit?
a legegyszerűbb ellenőrzés pl a kitöltöttség, de ennél jóval bonyolultabbakat is el tudok képzelni:
- numerikus valóban numerikus-e (jellemzően regexp)
- numerikus nagyobb/kisebb egy megadott értéknél
- két numerikus input közül az egyik nagyobb a másiknál
- két dátum input közül az egyik nagyobb a másiknál
- szöveges input esetében valamilyen regexp ellenőrzés (pl név nem lehet rövidebb 3 karakternél, vagy legyen benne keresztnév és vezetéknév)szóval a megvalósítás nagyban függ attól, mi az elvárt működés, én személy szerint olyasmiben gondolkodnék, hogy a tárolt ellenőrzési szabályokat rekordonként egy tömbben vagy JSON objektumban tárolom, majd definiálok egy check vagy hasonló nevű osztályt/függvényt, és a megadott tömbön végiggyalogolva minden rekordra meghívom. ez a függvény aztán eldönti a megadott tömb alapján, hogy mit fog csinálni (regexp, numerikus összehasonlítás, dátumok összehasonlítása, stb)
-
Speeedfire
félisten
Közben kutattam...
$('#user-login-form').submit(function() {
// hibaellenőrzés, ha üres a felhasználó vagy jelszó mező, nem küldi el
var hiba = '';
if ($("#edit-name").val() == "") {
hiba += 'Üresen hagytad a "felhasználó" mezőt!\n';
}
if ($("#edit-pass").val() == "") {
hiba += 'Üresen hagytad a "jelszó" mezőt!\n';
}
// ha van hiba, figyelmeztetés, nem küldjük el
if(hiba != ''){
alert(hiba);
return false;
}
return true;
});Már csak az lenne az érdekes, hogy tömbből keres ki dolgokat és hasonlítja össze az input mezővel és ha tartalmazza akkor error.
-
Speeedfire
félisten
Segítséget szeretnék kérni pár form ellenőrzésére. Ilyesmikre gondolok, hogy egy adott kifejezés hányszor van az input mezőben, vagy az adott inputmezőben van-e egy adott kifejezés, amit mondjuk egy tömbből olvas be. Mindezt ha rákattintok egy submit gomba és jelez nekem, hogy gond van. Írna valaki 1-2 példát? Esetleg linket ha kezdő kérdés?
-
jeges
senior tag
nem igazán. a .html() nagyjából a js (dom) innerHTML tulajdonság értékét (azaz szövegesen az elem tartalmát, akármi is az) adja vissza. ellentétben a .val()-lal, ami nagyjából a js (ill dom elem) .value-t adja vissza.
inputoknak általában value-ja van (kivéve textarea pl.), div-nek, li-nek, és hasonlóknak inkább innerHTML.
a pontos használat jquery dokumentációban fellelhető (google-ban jquery + html/val)
Új hozzászólás Aktív témák
- Béta iOS-t használók topikja
- AMD GPU-k jövője - amit tudni vélünk
- Philips LCD és LED TV-k
- Kedvenc zene a mai napra
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Fortnite - Battle Royale & Save the World (PC, XO, PS4, Switch, Mobil)
- Hálózati / IP kamera
- Azonnali fotós kérdések órája
- Álláskeresés, interjú, önéletrajz
- Lexus, Toyota topik
- További aktív témák...
- MacSzerez.com - iPhone 12 Pro Max / 128GB / Asztro / Új gyári akku! / Garancia!
- MacSzerez.com - 2017 MacBook Pro 15" / i7 2.9GHz - 4 Mag / 16GB RAM / 512GB SSD / Radeon Pro 4GB
- MacSzerez.com - iPhone 13 Pro Max / 128GB / Asztro szürke / Garancia!
- MacSzerez.com - iPhone 13 Pro Max / 128GB / Sierra Blue / Új Apple akkumulátor!
- Nitro AN515-57 15.6" FHD IPS i5-11400H RTX 3050 16GB 512GB NVMe + 1TB HDD magyar vbill gar
- Telefon felváráslás!! Xiaomi Redmi Note 11, Xiaomi Redmi Note 11 Pro, Xiaomi 11 Lite
- Bomba ár! Lenovo ThinkPad T460 - i5-6GEN I 8GB I 256GB SSD I 14" FHD I Cam I W10 I Garancia!
- AKCIÓ! EZÜST! RITKASÁG! Surface Pro 11 Qualcomm Snapdragon X Elite 16GB 1000GB OLED 120Hz Gar!
- 0% THM részletfizetés, beszámítás! Gamer PC, notebook, konzol, Apple termék, hardver KAMATMENTESEN!
- Bomba ár! Toshiba Satellite Pro R50-C - i3-6G I 4GB I 128GB SSD I 15,6" I HDMI I Cam I W10 I Gari!
Állásajánlatok
Cég: FOTC
Város: Budapest