Érdekes ez a mező színezés. Nem egyszerűbb az alert? vagy a mellette lévő hasába, kiírni mi a feltétel?
jQuery topic - Szoftverfejlesztés fórum
hozzászólások
![](/dl/faces/motorhead2.gif)
martonx
(veterán)
ennyiből nehéz megmondani.
Talán ha a changePartner1-et leírnád, mert a hiba nyilván abban lesz.
![](/dl/faces/afrus.gif)
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);
}
});
}
[ Szerkesztve ]
![](/dl/faces/own/jeges.gif)
jeges
(senior tag)
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.
![](/dl/faces/own/jeges.gif)
jeges
(senior tag)
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.
![](/dl/faces/afrus.gif)
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.
[ Szerkesztve ]
![](/dl/faces/afrus.gif)
Brown ügynök
(senior tag)
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).
[ Szerkesztve ]
Na bazz, a labelt nem is vettem észre.
![](/dl/faces/own/jeges.gif)
jeges
(senior tag)
ezek szerint ezt már próbáltad?
<select onchange="changePartner1(this, 'partner20', 'partner30' );" >
![](/dl/faces/afrus.gif)
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
[ Szerkesztve ]
![](/dl/faces/own/jeges.gif)
jeges
(senior tag)
nos igen, itt sztem meggondolandó, hogy ne inline .onclick-et használj
![](/dl/faces/afrus.gif)
Brown ügynök
(senior tag)
És hogy gondoltad ezt a head-s dolgot? A php-fájlba rakjam a fv-t?
![](/dl/faces/own/jeges.gif)
jeges
(senior tag)
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.
![](/dl/faces/afrus.gif)
Brown ügynök
(senior tag)
No jól van, de egyszerre több onclick-em is lehet. Itt azzal van a baj, hogy azt hiszi az FF hogy ami az onclicken beül van (changePartner1(this, span2, span3) azok fv., pedig csak változó(nevek). IE, meg Crome pedig tudja
![](/dl/faces/own/jeges.gif)
jeges
(senior tag)
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.
[ Szerkesztve ]
![](/dl/faces/afrus.gif)
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
<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)
![](/dl/faces/afrus.gif)
Brown ügynök
(senior tag)
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);
}
});
}
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.
![](/dl/faces/afrus.gif)
Brown ügynök
(senior tag)
Valóban. 1 kb-al csökkent a kód.