Jump to content
php.lv forumi

Recommended Posts

Posted

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!

  • Replies 35
  • Created
  • Last Reply

Top Posters In This Topic

Posted (edited)

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
Posted

Parasti tas saucās auto-complete. Gūglē meklējot papildus vari pielikt ajax keywordu un 100% ka kautko atradīsi.

Posted (edited)

bet tas list box man izskatās šādi:

th.00aee5cff8.jpg

 

un tur tanī list box es nevaru nekā editēt. Bet vērtības es ņemu no jau sagatavota querija.

Edited by Sasa
Posted

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.

Posted

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?

Posted (edited)

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
Posted

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.

Posted

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

Posted (edited)

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
Posted

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.

Posted (edited)

šķ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
Posted

Nu tad taisot to jauno listboxi pieliec to indoom uzrakstīto filter funkciju uz taimouta šim listboksim. Kur problēma?


×
×
  • Create New...