Witam
Używam frameworka Code Igniter oraz XAJAX 0.2.4 zintegrowane z frameworkiem. Bardzo ładnie działa i nie sprawia problemów. (na stronie
http://codeigniter.com/wiki/XAJAX/ pokazane jest jak zrobić)
Problem jest tego typu że gdy mam wypełnione pola formularza i później zdecyduje że chce jeszcze dodać więcej pól to wartości, które były wpisane w pola (input) zostaną zmazane i tylko wartości zostaną zmazane ale wiersz z polami zostanie dodany a poprzednie pola pozostaną. Dziwi mnie bo powinno, tak myślę, wartości w input zostawić jeśli działa dodawanie pól.
Poniżej przedstawiam metodę odpowiedzialną za dodawanie tych pól
<?php
function dodajPole($wiersze)
{
$objResponse = new xajaxResponse();
/* zlicza ile wierszy pol zostalo dodanych ponieważ liczba wierszy sluzy jako idi
fikator
wiersza dodanych pol. Pozwala to później na usuniecie wiersza o wybranym id wier
sza*/
$wiersze++;
$objResponse->addAssign('nrWierszy', 'value',$wiersze);
//w zmienej jest umieszczone pola typu input i checkbox ktore maja byc dodawane po
la do formularza
$polaHTML = '<tr id="tr'.$wiersze.'">
<td id="idPolaTD'.$wiersze.'"></td>
<td id="nazwaPolaTD'.$wiersze.'"></td>
<td id="typPolaTD'.$wiersze.'"></td>
<td id="wartoscTD'.$wiersze.'"></td>
<td id="typWartosciTD'.$wiersze.'"></td>
<td id="wymaganePoleTD'.$wiersze.'"></td>
<td id="">r</td>
<td id=""></td>
<td id=""></td>
</tr>';
//to co powstalo w zmienej poleHTML zostanie wypełnione odpowiednimi polami
$objResponse->addAppend("dynamicznePolaFormularza", "innerHTML", $polaHTML);
$objResponse->addCreateInput('nazwaPolaTD'.$wiersze, "text", "pola[".$wiersze."][Id_pola]", "pola[".$wiersze."][Id_pola]");
$objResponse->addCreateInput('typPolaTD'.$wiersze, "text", "pola[".$wiersze."][Nazwa_pola]", "pola[".$wiersze."][Nazwa_pola]");
return $objResponse->getXML();
}
?>
Jak zauważyłem wina jest po stronie innerHTML gdy usunę wiersz z
<?php
$objResponse->addAppend("dynamicznePolaFormularza", "innerHTML", $polaHTML);
?>
i pozostawcie tylko te polecenia ktore służa do dodawania inputów to ładnie dodaje
<?php
$objResponse->addCreateInput('nazwaPolaTD'.$wiersze, "text", "pola[".$wiersze."][Id_pola]", "pola[".$wiersze."][Id_pola]");
$objResponse->addCreateInput('typPolaTD'.$wiersze, "text", "pola[".$wiersze."][Nazwa_pola]", "pola[".$wiersze."][Nazwa_pola]");
?>
ale w tedy nie mam zachowanej estetyki na stronie www i chce żeby każde dodane pola były w osobnym wierszu, który wiersz ma przypisany styl CSS co ładnie się prezentuje
Poniżej jest szablon
<div id="polaFormularza"> <table id="dynamicznePolaFormularza" class="polaFormularza"> <td class="naglowek">Id
</td> <td class="naglowek">Nazwa
</td> <td class="naglowek">Typ
</td> <td class="naglowek">Wartość domyślna
</td> <td class="naglowek">Typ wartości
</td> <td class="naglowek">Wymagane
</td> <td class="naglowek"> </td> <td class="naglowek"> </td> <td class="naglowek"> </td>
Czy ma ktoś może rozwiązanie tego problemu? Ja całkowicie sie nie znam na Java i dlatego wybrałem XAJAX co mi bardzo wystarcza.
Druga sprawa czy może ktoś wie dlaczego działający kod w IC z XAJAX 0.2.4 działa ale nie działa po upgreidzie na XAJAX 0.2.5
wyskakuj błąd i ten temat był poruszony (tak myśle że chodzi o to samo) na
http://community.xajaxproject.org/viewtopic.php?id=4630 ale z tej strony nie rozumiem

Znalazłem rozwiązanie drugiego błedu. Wina jest w bibliotece a dokładnie w pliku xajax.inc.php (linia 747 do 756) znajduje się błąd literowy
<?php
$oResponse = new xajaxResponse();
$oResponse->addAlert("No XML Response Was Returned By Function $sFunctionName.nnOutput: ".$oResponse);
}
else if ($sPreResponse != "") {
$oNewResponse = new xajaxResponse($this->sEncoding, $this->bOutputEntities);
$oNewResponse->loadXML($sPreResponse);
$oNewResponse->loadXML($oResponse);
$oResponse = $sNewResponse;
}
?>
a powinno być tak
<?php
$oNewResponse = new xajaxResponse();
$oNewResponse->addAlert("No XML Response Was Returned By Function $sFunctionName.nnOutput: ".$oResponse);
$oResponse = $oNewResponse;
}
else if ($sPreResponse != "") {
$oNewResponse = new xajaxResponse($this->sEncoding, $this->bOutputEntities);
$oNewResponse->loadXML($sPreResponse);
$oNewResponse->loadXML($oResponse);
$oResponse = $oNewResponse;
}
?>
Ale upgrade nie pomogło mi rozwiązać mój główny problem.
Czy wie może dlaczego po zastosowaniu innerHTML w kodzie do dodawania inputów w IE wartości poprzednio dodanych inputów są a w firefox znikają wszystkie wartości uprzednio dodane
Ten post edytował kaniagandzowski 14.06.2007, 22:12:28