Autor Zpráva
čoko
Profil *
Dobrý večer,
mám v javascriptu napsaný script, který při stisku šipek prochází tabulku buď nahoru nebo dolů, ve ff funguje vše jak má, ale v ie dochází k tomu, že reaguje na stisk šipky i scrollováním obrazovky, tudíž se během několika stisknutí dostanu z oblasti, kterou chci zobrazovat. Zkoušel jsem ie vnutit oblast pomocí scrollTo(), ale dochází k trhanému pohybu, kdy ie nejprve vyhodnotí stisk šipky a pak až přesune na oblast, kterou jsem určil.
Otázka je, jak tomuto trhavému pohybu zabránit, nebo to jinak obějít, aby se mi zobrazovala vždy správná oblast.
habendorf
Profil
Bez kódu? Ani ťuk ...
čoko
Profil *
tady je kod procházení tabulky:
var TableBrowser = {
	table : null,
	row: null,
	cell: null,
	active: false, 
	y : 0,
	
	setTable : function () {
		TableBrowser.table = document.getElementById("table");
		TableBrowser.row = TableBrowser.table.rows[1];	
		TableBrowser.row.id = "tr_active";
		TableBrowser.cell = TableBrowser.row.cells[1];
		TableBrowser.cell.id = "td_active";
		TableBrowser.active = true;
	},
	
	nextRow : function () {
		if(TableBrowser.row.rowIndex < TableBrowser.table.rows.length - 1) {
			TableBrowser.row.id = "";
			TableBrowser.cell.id = "";

			TableBrowser.row = TableBrowser.table.rows[TableBrowser.row.rowIndex + 1];
			TableBrowser.row.id = "tr_active";
			TableBrowser.cell = TableBrowser.row.cells[TableBrowser.cell.cellIndex];
			TableBrowser.cell.id = "td_active";
			TableBrowser.y += 20;
			window.scrollBy(0, TableBrowser.y);
		}
		else {
			alert("Jste na posledním řádku tabulky");
		}
	},
	
	previousRow : function () {
		if(TableBrowser.row.rowIndex > 1) {
			TableBrowser.row.id = "";
			TableBrowser.cell.id = "";

			TableBrowser.row = TableBrowser.table.rows[TableBrowser.row.rowIndex - 1];
			TableBrowser.row.id = "tr_active";	
			TableBrowser.cell = TableBrowser.row.cells[TableBrowser.cell.cellIndex];
			TableBrowser.cell.id = "td_active";
			TableBrowser.y -= 20;
			window.scrollBy(0, TableBrowser.y);		
		} 
		else {
			alert("Jste na prvním řádku tabulky");
		}
	},

	nextCell : function () {
		if(TableBrowser.cell.cellIndex < TableBrowser.row.cells.length) {
			TableBrowser.cell.id = "";
			TableBrowser.cell = TableBrowser.row.cells[TableBrowser.cell.cellIndex + 1];			
			TableBrowser.cell.id = "td_active";
		}
		else {
			alert("Jste na posledním sloupečku tabulky");
		}		
	},

	previousCell : function () {
		if(TableBrowser.cell.cellIndex > 1) {
			TableBrowser.cell.id = "";
			TableBrowser.cell = TableBrowser.row.cells[TableBrowser.cell.cellIndex - 1];			
			TableBrowser.cell.id = "td_active";
		}
		else {
			alert("Jste na prvním sloupečku tabulky");
		}	
	},

	isTableActive: function() {
		return TableBrowser.active;
	}	
};

a tady je commandListener:
	listener : function(event) {
		var keynum;
		
		if(window.event) {
			keynum = window.event.keyCode;
		}
		else if(event.which) {
			keynum = event.which;
		}

		switch(keynum) {
			case CommandListener.left: TableBrowser.previousCell(); break;
			case CommandListener.right: TableBrowser.nextCell(); break;
			case CommandListener.up: TableBrowser.previousRow(); break;
			case CommandListener.down: TableBrowser.nextRow(); break;
		}
	}
čoko
Profil *
Teda místo toho scrollBy() tam má být scrollTo()

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: