Avatar billede jonas82 Nybegynder
23. januar 2006 - 19:14 Der er 10 kommentarer og
1 løsning

Refreshe div uden kliklyd/blink

Hvis jeg har en tabel som nedenstående, hvordan kan jeg så få opdateret enkelte felter i tabellen uden at reloade hele siden. Og uden irriterende blink/klik lyd i IE?

Den dynamiske værdi hentes fra en database via php.

<table border="1">
  <tr>
    <th>Statisk</th>
    <th>Dynamisk</th>
  </tr>
  <tr>
    <td>Fast værdi</td>
    <td><div>Jeg ændrer mig</div></td>
  </tr>
</table>
Avatar billede roenving Novice
23. januar 2006 - 19:18 #1
Nej !-)

-- du kan kun opdatere window-objekter, altså browser-vinduer og (i)frames ...

-- hvis du lægger en iframe inde i elementet kan du f.eks. bruge location.reload(true); som vil lave nummeret !o]
Avatar billede jonas82 Nybegynder
23. januar 2006 - 19:30 #2
Nedenstående er hvad jeg har rodet med indtil videre ud fra eksempler fundet her på eksperten. Men det giver mig den irriterende kliklyd og blink.
Jeg er absolut ikke skarp i Javascript, så leder efter noget eksempel at gå ud fra, hvis det da er muligt.
<body>
<script type="text/JavaScript">
function writeField(obj) {
    var o = document.getElementById("Field");
    o.innerHTML = obj.document.body.innerHTML + o.innerHTML;
}
</script>
    <table border="1">
  <tr>
    <th>Statisk</th>
    <th>Dynamisk</th>
  </tr>
  <tr>
    <td>Fast værdi</td>
    <td>
        <div id="Field"></div>
        <iframe src="testiframe.php" frameborder="0"
        style="position:absolute;width:1px;height:1px;left0px;top:0px;"></iframe>
    </td>
  </tr>
  <tr>
    <td>Fast værdi</td>
    <td>Jeg ændrer mig</td>
  </tr>
</table>
</body>

testiframe.php
<body>
<script type="text/JavaScript">
window.onload = function() {
    setTimeout('location.reload()', 5000)
    parent.writeField(this);
}
</script>
<?
$result = mysql_query("SELECT * FROM test WHERE test_id = 1");
while($row = mysql_fetch_array($result)) {
    echo $row['value'];
}
?>
<a href="index2.php">klik</a>
</body>
</html>
<?
mysql_close();
?>
Avatar billede olebole Juniormester
24. januar 2006 - 00:19 #3
<ole>

Prøv med et link til et eksempel, for det der bør da hverken 'klikke' eller 'blinke'  :)

/mvh
</bole>
Avatar billede jonas82 Nybegynder
24. januar 2006 - 16:56 #4
http://badass.lir.dk/test/test.php

Det data der opdateres er bare noget random genereret for testens skyld ;-)
Avatar billede roenving Novice
25. januar 2006 - 06:43 #5
Det hverken klikker eller blinker, men det er jo klart at et vindue, der skal gentegnes et sted i processen må stå uden indhold !-)
Avatar billede olebole Juniormester
25. januar 2006 - 09:24 #6
Skjul din iframe med style="display:none", så klikker den ikke i IE - og så kan man i øvrigt ikke bruge 'innerHTML' under XHTML  :)
Avatar billede jonas82 Nybegynder
25. januar 2006 - 11:56 #7
Den klikker nu stadig i min IE.
Avatar billede olebole Juniormester
25. januar 2006 - 12:39 #8
Prøv disse to filer:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>TITLE</title>
<script type="text/JavaScript">
function writeField(obj) {
    var o = document.getElementById("Field");
    o.innerHTML = obj.document.body.innerHTML + o.innerHTML;
}
</script>
</head>
<body>
    <table border="1">
  <tr>
    <th>Statisk</th>
    <th>Dynamisk</th>
  </tr>
  <tr>
    <td>Fast værdi</td>
    <td>
        <div id="Field"></div>
        <iframe style="display:none;position:absolute;width:1px;height:1px;left:0px;top:0px;" src="testing.html" frameborder="0"></iframe>
    </td>
  </tr>
  <tr>
    <td>Fast værdi</td>
    <td>Jeg ændrer mig</td>
  </tr>
</table>

</body>
</html>

-- og filen i iframe'en:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>TITLE</title>
</head>
<script type="text/JavaScript">
window.onload = function() {
    document.body.innerHTML = new Date().getTime();
    setTimeout('location.reload()', 2000)
    parent.writeField(this);
}
</script>
<body>


</body>
</html>

- der er ikke noget, der klikker  :)
Avatar billede olebole Juniormester
25. januar 2006 - 12:43 #9
Dooohhhh ... så tror da pokker, det klikker! Du opdaterer jo begge dokumenter ... slet denne linje i hoved-dokumentet:
    <META HTTP-EQUIV="refresh" CONTENT="5">

- og ret din funktion til:

function writeField(obj) {
    var o = document.getElementById("Field");
    o.innerHTML = obj.document.body.innerHTML;
}
Avatar billede jonas82 Nybegynder
25. januar 2006 - 13:45 #10
hehe ups. Det var ikke så smart. Men nu virker det. Mange tak!

Pointene må gå til Ole.
Avatar billede olebole Juniormester
25. januar 2006 - 13:48 #11
- hehe ... det er, hvad der sker i kampens hede - og selvtak  ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester