Js jako event handler <IMG onload=...> nefunguje – JavaScript, AJAX, jQuery – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Js jako event handler <IMG onload=...> nefunguje – JavaScript, AJAX, jQuery – Fórum – Programujte.comJs jako event handler <IMG onload=...> nefunguje – JavaScript, AJAX, jQuery – Fórum – Programujte.com

 

Petroff0
Věrný člen
10. 12. 2010   #1
-
0
-

Pokud je níže uvedený javascript vložený jako obsah <script>XXXXXX</script>, pak normálně funguje:
nastaví ve formuláři u vstupních polí ovladače onkeyup=kalkuluj (Ten při kláves.vstupu přepočítává obsah výstupních <SPANů>.

Bohužel nemůžu tag <script> použít, jedině nějaké inline řešení, tj. dovnitř nějakého tagu (na webgarden povoleného)
Napadlo mě vložit js do tagu img:
<IMG src="xxxx" style="display:none" onload="XXXXXX">

JS se sice spustí, a při kontrole Firebug ukázal, že INPUTyu mají správně onkeyup=kalkuluj
!!! Přesto žádná reakce na stisk kláves !!!
Něco jsem přehlédl ???



function kalkuluj(){
var liveminimum = 3126;
var bytminimum = 4597;
var untouch = liveminimum + bytminimum;

if(document.getElementById('mzdacista').value){
var mzdacista = document.getElementById('mzdacista').value;
}
else{
var mzdacista = 0;
}

if(document.getElementById('dluznik').value){
var dluznik = document.getElementById('dluznik').value;
}
else{
var dluznik = 0;
}

if(document.getElementById('manzelka').value){
var manzelka = document.getElementById('manzelka').options[document.getElementById('manzelka').selectedIndex].value;

}
else{
var manzelka = 0;
}

if(document.getElementById('deti').value){
var deti = document.getElementById('deti').value;
}
else{
var deti = 0;
}

var dluznikuntouch = untouch/3*2*dluznik;
var manzelkauntouch = untouch/3*2/4*manzelka;
var detiuntouch = untouch/3*2/4*deti;
var basicuntouch = Math.ceil(dluznikuntouch + manzelkauntouch + detiuntouch);
if(basicuntouch>mzdacista){ basicuntouch = mzdacista; }
var restofmoney = mzdacista - basicuntouch;
var slozka3 = mzdacista - basicuntouch - untouch;
if(slozka3<0){ slozka3 = 0; }
var slozkax = mzdacista - basicuntouch - slozka3;
var slozkax1 = slozkax - 1;
var slozkax2 = slozkax - 2;

if(delitelnost(slozkax,3)){
var slozka2 = slozkax;
}else{

if(delitelnost(slozkax1,3)){
var slozka2 = slozkax1;
}else{

var slozka2 = slozkax2;

}
}
var delenec = slozka2/3;
var mzdakvyp = parseInt(basicuntouch) + parseInt(delenec);
var oddluzeni = mzdacista - mzdakvyp;
if(oddluzeni < 0) { oddluzeni = 0; }
var totalsplatky = oddluzeni*5*12;
var maxdluh = totalsplatky/0.3;

document.getElementById('sem1').innerHTML = addCommas(oddluzeni);
document.getElementById('sem2').innerHTML = addCommas(mzdakvyp);
document.getElementById('sem3').innerHTML = addCommas(totalsplatky);
}

function delitelnost(co,cim) {
var zbytek;
zbytek = co % cim;
if (zbytek == 0) {
return true;
}
else {
return false;
}
}

function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ' ' + '$2');
}
return x1 + x2;
}

if(document.getElementById('kalkulacka')){
var inputs = document.getElementsByTagName('input');
for (var ii = 0; ii < inputs.length; ii++) {
inputs[ii].onkeyup = kalkuluj;
}
var selects = document.getElementsByTagName('select');
for (var yy = 0; yy < selects.length; yy++) {
selects[yy].onchange = kalkuluj;
}
}

FF / VIEW SOURCE CHART OF stránka otevřená v prohlížeči:


......... FORMulář ..........
<div class="content_part">
<div class="file">
<style>
table#kalkulacka{ border: 5px solid #e7e7e7; border-collapse: collapse;}#kalkulacka th, #kalkulacka td{ border: 1px solid #e7e7e7; padding: 4px 1em;}#kalkulacka th{ text-align: left;}#kalkulacka td{ text-align: right;}
</style>
<form action="javascript:void 0" method="post">
<div id="aroundkalkule" style="margin: 10px;">
<table id="kalkulacka">
<tbody>
<tr>
<th>
Čistá mzda (měsíční)
</th>
<td>
<input id="mzdacista" class="numbers required" name="mzdacista" value="" type="text">
<input id="dluznik" class="numbers required" name="dluznik" value="1" disabled="disabled" type="hidden">
</td>
</tr>
<tr>
<th>
Manžel/ka
</th>
<td>
<select name="manzelka" id="manzelka">
<option value="0" selected="selected">
ne
</option>
<option value="1">
ano
</option>
</select>
</td>
</tr>
<tr>
<th>
Děti a další vyživované osoby
</th>
<td>
<input id="deti" class="numbers" name="deti" value="" type="text">
</td>
</tr>
<tr>
<th colspan="2" style="text-align: center;">
<input style="height: 20px;" value="Výsledek" name="calculate" id="calculate" type="button">
</th>
</tr>
<tr>
<th>
Měsíční splátka pro oddlužení
</th>
<td>
<span id="sem1">
0
</span>
</td>
</tr>
<tr>
<th>
Mzda k výplatě
</th>
<td>
<span id="sem2">
0
</span>
</td>
</tr>
<tr>
<th>
Celková výše splátek pro oddlužení za 5 let
</th>
<td>
<span id="sem3">
0
</span>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</div>
</div>
......... JS ..........
<div class="content_part">
<div class="file">
<br>
<img src="http://vojtoma.mypage.cz/_/img/loader.gif" style="display: none;" onload="function kalkuluj(){ var liveminimum = 3126; var bytminimum = 4597; var untouch = liveminimum + bytminimum; if(document.getElementById('mzdacista').value){ var mzdacista = document.getElementById('mzdacista').value; } else{ var mzdacista = 0; } if(document.getElementById('dluznik').value){ var dluznik = document.getElementById('dluznik').value; } else{ var dluznik = 0; } if(document.getElementById('manzelka').value){ var manzelka = document.getElementById('manzelka').options[document.getElementById('manzelka').selectedIndex].value; } else{ var manzelka = 0; } if(document.getElementById('deti').value){ var deti = document.getElementById('deti').value; } else{ var deti = 0; } var dluznikuntouch = untouch/3*2*dluznik; var manzelkauntouch = untouch/3*2/4*manzelka; var detiuntouch = untouch/3*2/4*deti; var basicuntouch = Math.ceil(dluznikuntouch + manzelkauntouch + detiuntouch); if(basicuntouch>
mzdacista){ basicuntouch = mzdacista; } var restofmoney = mzdacista - basicuntouch; var slozka3 = mzdacista - basicuntouch - untouch; if(slozka3
<0){ slozka3 = 0; } var slozkax = mzdacista - basicuntouch - slozka3; var slozkax1 = slozkax - 1; var slozkax2 = slozkax - 2; if(delitelnost(slozkax,3)){ var slozka2 = slozkax; }else{ if(delitelnost(slozkax1,3)){ var slozka2 = slozkax1; }else{ var slozka2 = slozkax2; } } var delenec = slozka2/3; var mzdakvyp = parseInt(basicuntouch) + parseInt(delenec); var oddluzeni = mzdacista - mzdakvyp; if(oddluzeni
< 0) { oddluzeni = 0; } var totalsplatky = oddluzeni*5*12; var maxdluh = totalsplatky/0.3; document.getElementById('sem1').innerHTML = addCommas(oddluzeni); document.getElementById('sem2').innerHTML = addCommas(mzdakvyp); document.getElementById('sem3').innerHTML = addCommas(totalsplatky);} function delitelnost(co,cim) {var zbytek;zbytek = co % cim;if (zbytek == 0) { return true;}else { return false;}} function addCommas(nStr){ nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length >
1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ' ' + '$2'); } return x1 + x2;} if(document.getElementById('kalkulacka')){ var inputs = document.getElementsByTagName('input'); for (var ii = 0; ii
< inputs.length; ii++) { inputs[ii].onkeyup = kalkuluj; } var selects = document.getElementsByTagName('select'); for (var yy = 0; yy
< selects.length; yy++) { selects[yy].onchange = kalkuluj; } }">
</div>
</div>


Nahlásit jako SPAM
IP: 89.102.93.–
Petroff0
Věrný člen
11. 12. 2010   #2
-
0
-

Nerozumím tomu ...dnes jsem to spustil v jiném prohlížeči (Opera 10.63) a ono to normálně funguje
V IE funguje
Ve FF, Google Chrome nefunguje
Zjistil jsem, že za to může funkce:
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ' ' + '$2');
}
return x1 + x2;
}
Pokud ji vložím do <script>, bude program fungovat.
Nevím proč - že by vadná syntaxe ?

PS.
VYŘEŠENO
Nejspíš je to tím, že obrázek+ovladače neběží v normálním kontextu [window], ale v samostatném threadu
Uvnitř funkce, kt. bude volána v normál.kontextu musí běžet všechny proměnné jako lokální:
function addCommas(nStr)
{
nStr += '';
var x, x1, x2;
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ' ' + '$2');
}
return x1 + x2;
}

Nahlásit jako SPAM
IP: 89.102.93.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Podobná vlákna

Auto click onload — založil Franceq

Orezavaci handler — založil George

Session handler — založil truth

Menu Handler — založil Algon

Handler mjepg — založil Peter

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý