Jump to content
php.lv forumi

Meklētājs iekš list box!


Sasa

Recommended Posts

Meklēju sākumā googlē bet nemācēju noformulēt ko es gribu panēkt. Tātad ir tāda lieta ka ir listbox ar querija palīdzību savāc datus ko sevī rādīt. Un šobrīd man tajā list box'ā ir ļoti daudz ko izvēlēties.

Kā lai sataisa tadu kā meklētāju iekš tā listbox šobrīd ņem pēc pirmā burta bet zem tā pirmā butra arī ir ļoti daudz? Listbox nav editējams!

Link to comment
Share on other sites

  • Replies 35
  • Created
  • Last Reply

Top Posters In This Topic

bez ajax palidzibas man liekas te neiztikt.

uztaisi kaut kadu

<input type="text" name="search" onchange="displayResults(this.value)" />

 

un taa displayResults f-ja suuta ajax requestu un apdeito to 'listbox' pec search parametra.

 

aa jaa, padomaju ka mosh var iztikt bez ajax, js masiivaa turot elementus un meklejot pec tiem, hvz cik atri tas gan varetu stradat

Edited by NiTrino
Link to comment
Share on other sites

būs šis pēdējais variants jāpamēģina sataisīt, bet domāju ka būs kārtējās problēmas to visu salikt tā lai strādā kad pienāk klāt jauns listbox'is jo man tie listbox'i var krātiec viens zem otra kaut 10.

Link to comment
Share on other sites

indoom, piemērs strādā pat ļoti labi, tik ir viena problēma man to listbox'šu var būs ļoti daudz, bet meklētājs meklē tikai pirmajā!

<script type="text/javascript">
var finder = {
ftimer   : 0,
list	 : null,
flist : function (el) {
	if (this.ftimer) { clearTimeout(this.ftimer); }
	if (!this.list) { this.list = document.getElementById('Kods'); } <-- meklēšana notiek tikai pa pirmo listboxi!
	this.ftimer = setTimeout(function () { 
		finder.filter(el.value.replace(/^\s+/g,'').replace(/\s+$/g,'')); 
		el=null;
	},500); // meklē pēc noteikta intervāla, kad beidz rakstīt
},
filter : function (t) {
	for(var i=0,e=finder.list.options,l=e.length,c,f;i<l;i++) {
		c = e[i];
		if (t === '') {	// noņem filtru
			if (c.filter === true) { c.style.display = ''; c.filter = false; }
			e[0].selected = true;
		}
		else { // pieliek filtru
			f = c.value.toLowerCase().indexOf(t.toLowerCase()) === -1; 
			c.filter = f; 
			c.style.display = f ? 'none' : ''; 
			if (!f) { c.selected = true; }
		}
	}
}
};
</script>

 

Kā varētu sataisīt, kaut kā tā, ka ir:

{ this.list = document.all('Kods',i); }

kur i katru reizi palielināt, kad pirmais list box ir apstiprināts (manā gadījumā ar enter nospiešanu),

 

mans Enter taustiņa nospiešanas scripts:

<script language=JavaScript1.2><!--
//notikumi pie ENTER taustina nospiesanas
function microsoftKeyPress() {	
if (window.event.keyCode== 13){ //parbaude uz ENTER taustina nospiesanu
//saglabajam ierakstu ...
try { if (MSODSC.DataPages.Count > 0)
if (MSODSC.CurrentSection == null)
	MSODSC.DataPages(0).Save();
else
	MSODSC.CurrentSection.DataPage.Save(); }
catch (e)
{ alert (e.description);}
//parejam uz jaunu rindinu ...
try { if (MSODSC.CurrentSection == null)
	MSODSC.DataPages(0).NewRecord();
else
	MSODSC.CurrentSection.DataPage.NewRecord(); }
catch (e)
{ alert (e.description);}

}	
}
//--></SCRIPT>

 

bet kā es varu pie Enter nospiešanas palielināt i un nodot to funkcijai kura meklējas pa listbox'i?

Link to comment
Share on other sites

Papildināju sākotnējo skriptu ar loopu, kas iet cauri visiem sarakstiem.

 

Jānorāda meklējamo listu id arrayā

if (!this.list) { this.list = [document.getElementById('list1'),document.getElementById('list2'),document.getElementById('list3')]; }

 

 

Nesapratu, kāpēc tas enter vajadzīgs?

Edited by indoom
Link to comment
Share on other sites

tas Enter man ir vajadzīgs lai junus listboxus iedod un katrā list boxi man var būt cita vērtība, tāpēc ka man ir id listboxim viens un tas pats tāpēc arī gribu no enter funkcifas nodod meklētāja funkcijai vērtību

 

un tad sanāks

 

document.all('listbox',i) , kur i ir nodotā i vērtība no enter funkcijas! un tad meklētājs zinās ka ir jāmeklē nākamajā listbox kurš mēc kārtas skaitļa ir nākamais.

Link to comment
Share on other sites

Izmantojot enter, zūd dinamika. Tavā variantā var izmantot šādu kodu tad

<script type="text/javascript">
var finder = {
ftimer   : 0,
flist : function (el, target) {
	if (this.ftimer) { clearTimeout(this.ftimer); }
	this.ftimer = setTimeout(function () { 
		finder.filter(el.value.replace(/^\s+/g,'').replace(/\s+$/g,''),target); 
		el=null;
	},500); // meklē pēc noteikta intervāla, kad beidz rakstīt
},
filter : function (t,target) {
	if (!(target = document.getElementById(target))) { return; }
	for(var i=0,e=target.options,l=e.length,c,f;i<l;i++) {
		c = e[i];
		if (t === '') {	// noņem filtru
			if (c.filter === true) { c.style.display = ''; c.filter = false; }
			e[0].selected = true;
		}
		else { // pieliek filtru
			f = c.value.toLowerCase().indexOf(t.toLowerCase()) === -1; 
			c.filter = f; 
			c.style.display = f ? 'none' : ''; 
			if (!f) { c.selected = true; }
		}
	}
}
};
</script>

 

un palaiž ar

 

<input type="text" value="" onkeyup="finder.flist(this,'list1')" onchange="finder.flist(this,'list1')" />

kur 'list1' ieraksti meklējamā lista id

Link to comment
Share on other sites

id ir viens un tas pats katru reizi mainās tikai tā id kātras numus , piem., man ir id='Kods' tādu id var būt kaut 10 viens zem otrā bet lai es varētu tikt pie devītā, man jārīkojas šādi:

 

document.all('Kods',9)

 

un ja es gribu iet visiem id='Kods' cauci man vajag ciklu piems cikla saskaitīt cim to to 'kods' ir.

 

Nesanāk pie katra Enter taustiņa nospiešanas palielināt i par 1

function microsoftKeyPress() {	
i = 0;
if (window.event.keyCode== 13){ //parbaude uz ENTER taustina nospiesanu	
i = i + 1;
alert(i);
  //saglabajam ierakstu ...
try { if (MSODSC.DataPages.Count > 0)
if (MSODSC.CurrentSection == null)
	MSODSC.DataPages(0).Save();
else
	MSODSC.CurrentSection.DataPage.Save(); }
catch (e)
{ alert (e.description);}
//parejam uz jaunu rindinu ...
try { if (MSODSC.CurrentSection == null)
	MSODSC.DataPages(0).NewRecord();
else
	MSODSC.CurrentSection.DataPage.NewRecord(); }
catch (e)
{ alert (e.description);}

}	
}

 

katru reizi izvadās 2, bet vienu reizi takš viņš palilina!

Edited by Sasa
Link to comment
Share on other sites

Ok, ja pareizi sapratu, tad ir viens input lauks, ar kuru meklē vispirms vienā listā, tad pēc enter nospiešanas meklē nākošajā?

 

šitam tagad vajadzētu tā darboties

 

Jānorāda maxinc : 3; cik daudz listi būs (cik lielu incrementu ļaut)

 

un palaži ar onkeyup="finder.flist(event, this,'list')" onchange="finder.flist(event, this,'list')"

tam 'list' tad klāt kabināsies skaitlis.

 

Citi mainīgie vairs tur nav.

Link to comment
Share on other sites

šķiet ka šitais nederēs, jo es sākumā nezinu cik man to listbox'šu būs, es nevaru tā vienkārši ierobēžot. Sākumā kad es atveru savu lapu man tur ir tikai viens list box un kad nospiežu enter pienāk klāt otrs un tā spiežot enter tie list boxi krājās.

 

Vai var kaut kā tajā meklētāja izveidot tādu kas darītu kā es esmu izdomājis, kad es savā enter nospiešanas funkcijā gribu to elementa palielināšanu ielikt kaut kā neskaitās uz priekšu!

 

iekš savas KeyPress funkcijas man sanāk palielināt to i vērtību,

<script language=JavaScript1.2><!--
//notikumi pie ENTER taustina nospiesanas
i = 1;
function microsoftKeyPress() {
if (window.event.keyCode == 13){ //parbaude uz ENTER taustina nospiesanu		
  //saglabajam ierakstu ...
try { if (MSODSC.DataPages.Count > 0)
if (MSODSC.CurrentSection == null)
	MSODSC.DataPages(0).Save();
else
	MSODSC.CurrentSection.DataPage.Save(); }
catch (e)
{ alert (e.description);}
//parejam uz jaunu rindinu ...
try { if (MSODSC.CurrentSection == null)
	MSODSC.DataPages(0).NewRecord();		
else{
	MSODSC.CurrentSection.DataPage.NewRecord();
i++;
alert(i);
	}
	}
catch (e)
{ alert (e.description);}

}	
}
//--></SCRIPT>

Bet kā lai nodot šo vērtību indoom funkcijai pirmajam variantam kas tika bublicēts?

Edited by Sasa
Link to comment
Share on other sites


×
×
  • Create New...