jQuery topic - Szoftverfejlesztés fórum

üzenetek

hozzászólások


Speeedfire
(nagyúr)
Blog

É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? :B


martonx
(veterán)

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)

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 ]


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.


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. :)


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 :DDD . 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 ]


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 ]


Speeedfire
(nagyúr)
Blog

Na bazz, a labelt nem is vettem észre. :Y


jeges
(senior tag)

ezek szerint ezt már próbáltad?
<select onchange="changePartner1(this, 'partner20', 'partner30' );" >


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 ]


jeges
(senior tag)

nos igen, itt sztem meggondolandó, hogy ne inline .onclick-et használj


Brown ügynök
(senior tag)

És hogy gondoltad ezt a head-s dolgot? A php-fájlba rakjam a fv-t?


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.


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


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 ]


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


Peter Kiss
(senior tag)
Blog

<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)

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
(senior tag)
Blog

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)

Valóban. 1 kb-al csökkent a kód. :D

üzenetek