webForumDet fria alternativet

Skicka in funktion till funktion

JavaScriptur Javascript

28 svar · 1 703 visningar · startad av Web-Tor · sida 2 av 2

Frågan, av Web-Tor

Jag vill skicka in en funktion (func1) till en annan funktion (func2) och därifrån ska den första funktionen exekveras. <script type="text/javascript"> function func2(obj){ // alert(obj); « Här vill jag exekvera func1 } </script> <div onclick="func2('func1(\\'alert(123)\\');')">Save</div> Jag vet att det är ett dumt exempel men...

Läs frågan i sin helhet →
Medlem sedan nov. 200013 890 inlägg
#21

Om en tag har class="disabled" så ska funktionerna som ligger i onclick inte köras.

Jag skulle ju kunna kolla detta i respektive funktion men då skulle jag bli tvungen att ändra i alla existerande funktioner och i alla framtida funktioner.

Din kod ser ut att funka. :)
Dessvärre följer den ju inte riktigt samma mönster som en "vanligt" anrop så om ja ginte hittar något bättre så måste jag ändra på ganska många sidor. :(

Det här kanske går att lösa på något helt annat sätt? Jag vill bara inte ändra på alla funktioner på hela sidan och helst inte behöva ändra på sättet som variablerna skickas till funktionerna. D.v.s:
bar(this, object, 'var') o.s.v...

Medlem sedan dec. 20025 483 inlägg
#22

Du kan ju loopa igenom samtliga element och sätta onclick = null på de som är disabled. Då hindras de från att anropa funktioner i det attributet.

Medlem sedan nov. 200013 890 inlägg
#23

Problemet är bara knapparna kan disablas/enablas i olika funktioner runt om i systemet och då skulle även dom funktionernabehövas byggas. ;)

Men om vi backar några steg; gör det att komma åt innehållet i ett objekt som av typen [object Object]?

Medlem sedan dec. 20025 483 inlägg
#24

"Innehållet" i ett [object Object] är ingenting annat än vad objektet Object har att erbjuda. [object Object] är vad nämnd objekts toString()-metod returnerar.

Du kan utöka "klassen":

Object.prototype.p = function(){return 3.14;}

function bar(obj){
    alert(obj.p());
}
Medlem sedan aug. 20039 342 inlägg
#25

Det är inte hela sanningen. Alla användarskapade objekt skickar tillbaka [object Object] i toString som default, även om du har förlängt klassen, t ex:

<script type="text/javascript">
function TestClass(){
}
TestClass.prototype.something = function(){};

alert(new TestClass())

</script>

Denna kod alertar [object TestClass] som man kan tro (om man inte förlänger toString förstås) Dock har mozilla den goda smaken att returnera klassnamn på inbyggda klasser, t ex [object HTMLDivElement], medan IE inte ens gör det. Alltså har du i IE ingen aning om vilken sorts objektdet är frågan utifrån strängvärdet det returnerar.

Medlem sedan nov. 200013 890 inlägg
#26

Men kan man komma åt egenskaperna i [object Object]?

Medlem sedan aug. 20039 342 inlägg
#27

Web-Tor skrev:

Men kan man komma åt egenskaperna i [object Object]?

Svar ja, men du måste syfta på rätt objekt. Min punkt är att detta kan vara svårt att göra rätt pga IE's "dåliga" beskrivning av objekt.
Pröva detta då:

<script>
function execute(){
	if(arguments[1].className.indexOf("disabled")==-1){
	var i = arguments.length;
		arguments[0](arguments[1])
	}
}

function foo(){
alert("foo")

}

function bar(obj){
alert("bar: "+obj)
}
</script>

<div class="disabled" onclick="execute(function(){foo();bar(this)}, this);">Kör foo och bar disabled</div>
<div onclick="execute(function(){foo();bar(this)}, this);">Kör foo och bar</div>
Medlem sedan dec. 1999419 inlägg
#28

Web-Tor skrev:

Om en tag har class="disabled" så ska funktionerna som ligger i onclick inte köras.

Någon anledning till att följande inte är ett hyfsat alternativ?

onclick="if(className=='disabled')return; foo();bar(this)"
Medlem sedan nov. 200013 890 inlägg
#29

RGB skrev:

Någon anledning till att följande inte är ett hyfsat alternativ?

Jag visste väl att det fanns ett helt annat sätt att se på det här! :)

Nackdelen är att det blir mer kod i HTML-filerna istället för i JS-filen men det känns som att jag kan leva med just nu.

Markerar ditt svar som lösningen men är det någon som har fler idéer så är dom välkomna. :)

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