webForumDet fria alternativet

Confirm-ruta enligt DOM

11 svar · 660 visningar · startad av Helmertz

HelmertzMedlem sedan maj 2005353 inlägg
#1

Hej, nu vill jag bråka lite igen. Jag vill att HTML-dokumentet ska bevaras intakt men lägga till en ja/nej-confirm när element (länkar) i klassen deleteDish trycks ned, varpå (kan jag tänka mig) true returneras vid ja och false vid nej (eller avbryt o.s.v.), och händelsen fullföljs.

jawbreakerMedlem sedan jan. 2003296 inlägg
#2

Om jag förstått det hela rätt så borde följande fungera:

window.onload = function()
{
	var links = document.getElementsByTagName("a");
	for (var i = 0; i < links.length; i++)
	{
		if (links[i].className == "deleteDish")
		{
			links[i].onclick = function() { return confirm("Ta bort?"); }
		}
	}
}
colioneMedlem sedan juni 20014 421 inlägg
#3

Nja

när man loopar igenom sådär så brukar motorn trigga på följande:
links.className
och ge felet: links has no properties.
Dessutom om man ska vara riktigt petig så kan man ha fler än en class. Jag hade valt att göra följande:

window.onload = function()
{
	var links = document.getElementsByTagName("a");
	for (var i = 0; i < links.length; i++)
	{
	var link=links[i]
		if (link.className.match("deleteDish"))
		{
			link.onclick = function() { return confirm("Ta bort?"); }
		}
	}
}
HelmertzMedlem sedan maj 2005353 inlägg
#4

Ditt sätt fungerade bra, colione, men jag får be om ytterligare assistans.

Just nu ser min script-fil ut så här:

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function toggleDelMenu(){
	if (document.getElementById("pickupDel").checked){
		document.getElementById("homeDelMenu").style.display = "none";
	}else{
		document.getElementById("homeDelMenu").style.display = "block";
	}
}

function prepToggleDelMenu(){
	document.getElementById("homeDel").onclick = toggleDelMenu;
	document.getElementById("pickupDel").onclick = toggleDelMenu;	
	toggleDelMenu();
}

addLoadEvent(prepToggleDelMenu);

Jag försökte själv att lägga till funktionen du skrev men det ville sig inte. Skulle du kunna visa hur man gör?

colioneMedlem sedan juni 20014 421 inlägg
#5
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function toggleDelMenu(){
	if (document.getElementById("pickupDel").checked){
		document.getElementById("homeDelMenu").style.display = "none";
	}else{
		document.getElementById("homeDelMenu").style.display = "block";
	}
}

function prepToggleDelMenu(){
	document.getElementById("homeDel").onclick = toggleDelMenu;
	document.getElementById("pickupDel").onclick = toggleDelMenu;	
	toggleDelMenu();
}

function prepDelConf()
{
	var links = document.getElementsByTagName("a");
	for (var i = 0; i < links.length; i++)
	{
	var link=links[i]
		if (link.className.match("deleteDish"))
		{
			link.onclick = function() { return confirm("Ta bort?"); }
		}
	}
}

addLoadEvent( function() {
prepToggleDelMenu();
prepDelConf();
}
);
HelmertzMedlem sedan maj 2005353 inlägg
#6

Nej, det fungerade inte. Det är tänkt att se ut som:

addLoadEvent([i]function[/i]);

men det fungerar inte heller. :q

zcorpanMedlem sedan dec. 20042 245 inlägg
#7
document.onclick = function(e) {
  var e = e || window.event;
  var target = e.target || e.srcElement;
  while (target.tagName != "A" && target.parentNode)
    target = target.parentNode;
  if (/(^|\s)deleteDish($|\s)/.test(target.className))
    return confirm("Ta bort?");
  return true;
}

(Nu har jag inte tittat på vad ditt nuvarande skript gör dock så det här kanske inte var till så mycket hjälp... :) )

HelmertzMedlem sedan maj 2005353 inlägg
#8

Jag har inte testat din variant ännu, zcorpan, men har den större kompabilitet i webbläsarna så använder jag den istället. Frågan kvarstår dock hur man infogar funktionen i addLoadEvent.

colioneMedlem sedan juni 20014 421 inlägg
#9

Den koden funkar utmärkt för mig. Jag har testat mot följande:

<html>
<head><script>
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function toggleDelMenu(){
	if (document.getElementById("pickupDel").checked){
		document.getElementById("homeDelMenu").style.display = "none";
	}else{
		document.getElementById("homeDelMenu").style.display = "block";
	}
}

function prepToggleDelMenu(){
	document.getElementById("homeDel").onclick = toggleDelMenu;
	document.getElementById("pickupDel").onclick = toggleDelMenu;	
	toggleDelMenu();
}

function prepDelConf()
{
	var links = document.getElementsByTagName("a");
	for (var i = 0; i < links.length; i++)
	{
	var link=links[i]
		if (link.className.match("deleteDish"))
		{
			link.onclick = function() { return confirm("Ta bort?"); }
		}
	}
}

addLoadEvent( function() {
prepToggleDelMenu();
prepDelConf();
}
)
</script>
</head>
<body>
<a href="foo" class="deleteDish">foo</a><br>
<a href="foo" class="deleteDish">foo</a><br>
<a href="foo" class="deleteDish">foo</a><br>
<a href="foo" class="deleteDish">foo</a><br>
<a href="foo" class="deleteDish">foo</a><br>
<input type="checkbox" id="pickupDel">pick<br>
<input type="checkbox" id="homeDel">home<br>
<div id="homeDelMenu">foobar</div>
</body>
</html>
colioneMedlem sedan juni 20014 421 inlägg
#10

har nte helelr testat zcorpans kod, men den ska fungera lika bra som de övriga. Det är lite upp till dig om du vill lägga till onclick eventet till a-taggarna med classnamet deleteDish innan eller om du vill att funktionen körs varje gång någon klickar och triggar på om musklicket var inom en a-tagg med classname deleteDish.

HelmertzMedlem sedan maj 2005353 inlägg
#11

Mitt problem löste sig, tack Colione. Detta script includeras på varje sida, även de som inte har ett element med id:t delHome i sig. Nu utförs en check innan. Så här blev scriptet:

function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function toggleDelMenu(){
	if (document.getElementById("pickupDel").checked){
		document.getElementById("homeDelMenu").style.display = "none";
	}else{
		document.getElementById("homeDelMenu").style.display = "block";
	}
}

function prepToggleDelMenu(){
	if(document.getElementById("homeDel")) document.getElementById("homeDel").onclick = toggleDelMenu;
	if(document.getElementById("pickupDel")) document.getElementById("pickupDel").onclick = toggleDelMenu;	
	if(document.getElementById("homeDel") && document.getElementById("pickupDel")) toggleDelMenu();
}

function prepDelConf()
{
	var links = document.getElementsByTagName("a");
	for(var i = 0; i < links.length; i++){
		var link = links[i];
		if (link.className.match("deleteDish")){
			link.onclick = function(){
				return confirm("Ta bort denna maträtt?");
			}
		}
	}
}

addLoadEvent(prepToggleDelMenu);
addLoadEvent(prepDelConf);

Eftersom denna kod är den rätta markerar jag mitt eget svar som lösning men tack för hjälpen!

colioneMedlem sedan juni 20014 421 inlägg
#12

Dock så tycker jag det är snyggare att inkludera båda funktionerna samtidigt i addLoadEvent.

addLoadEvent( function() {
prepToggleDelMenu();
prepDelConf();
}
)

Men det är ju en smaksak.

126 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)