Klaus: Jquery UI Autocomplete / Selektion von Elementen

Beitrag lesen

Hallo,

Nachdem es mir gelungen ist, die Jquery UI Autocomplete Funktion isoliert zum arbeiten zu bringen, möchte ich sie gerne in ein laufendes Formular integrieren.

Mein JS-Code (der isoliert gut arbeitet):

  
$(function() {  
            // $('#abbrev').val(\"\");  
            $(\"#state\").autocomplete({  
                source: \"./_new/auto.php\",  
				 focus: function( event, ui ) {  
                 $( \"#state\" ).val( ui.item.label_unformatiert );  
                 $( \"li\" ).css( 'cursor', 'pointer' );  
                 return false;  
                 },  
                minLength: 4,  
                select: function(event, ui) {  
                    $('#hidden_id').val(ui.item.id);  
                    $('#abbrev').val(ui.item.abbrev);  
                    $('#nik1').val(ui.item.nik1);  
  
                }  
            })  
			  
            .data(\"autocomplete\")._renderItem = function( ul, item ) {  
			 item.label_unformatiert = item.label;  
			 item.label = item.label.replace(new RegExp(\"(?![^&;]+;)(?!<[^<>]*)(\" + $.ui.autocomplete.escapeRegex(this.term) + \")(?![^<>]*>)(?![^&;]+;)\", \"gi\"), \"<span class='blaub'>$1</span>\");  
             return $( \"<li></li>\" )  
            .append( \"<a><b>\" + item.label + \"</b><br>\" + item.bemerkung + item.taferint + \"</a><hr size=1>\" )  
            .appendTo( ul );  
             };  
        });  

Und das Formular:

  
  
<input type="text" id="state"  name="nummer" size='50' /><br>  
<input type="text" id="abbrev" name="bezeichnung" size="80"/><br>  
<input type="text" id="nik1" name="einheit" size="80"/><br>  
<input type="hidden" id="hidden_id" name="ID" />  

Mein Json codiertes return array besteht aus Datensätzen mit je:

$row_array['id'], $row_array['label'], $row_array['bemerkung'], $row_array['value'], $row_array['abbrev'] , $row_array['nik1'], $row_array['taferint']

Hierzu gleich eine Frage:
Warum wird die Nummer (die steht in $row_array['value']) aus dem JSON Array tatsächlich in das #state Element eingetragen, obwohl ich doch gar nicht  $('#state').val(ui.item.value); notiert habe??

Nun zu meinem eigentlichen Problem:

In meinem laufenden Script, in das ich Jquery UI autocomplete integrieren möchte, generiere ich mehrere "Eingabezeilen" per php nach folgendem Muster:

  
...  
<TD>  
<input type='text' class='f_tab' name=\"nummer[$i]\" id=\"nummer[$i]\" \>  
</TD>  
<TD>  
<input type='text' class='f_tab' name=\"bezeichnung[$i]\" id=\"bezeichnung[$i]\" />  
</TD>  
...  

(Die Tabelle ist eine echte Tabelle, sie dient nicht der Formatierung, sondern ist eine echte Aufzählung)

Meine Fragen:

1. Ist es sinnvoll, den JS-Code für jede Zeile zu wiederholen? Falls ja, wo kommt er hin? In Zelle 1 jeder Zeile?

2. Kann man das über ein Konstrukt ala jQuery(’input[id^="..."]’) einfangen?

3. Kann mir einer das ".data("autocomplete")._renderItem =" erklären? Also nicht den Inhalt der nachfolgenden Funktion, die ist mir durchaus klar.
 -- Warum der Punkt vor dem "data"?
 -- Warum data?
 -- Warum "autocomplete"

Gruß, Klaus