JS fout in firefox en safari.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom aan t Goor

Tom aan t Goor

02/02/2013 20:20:38
Quote Anchor link
Ik heb een stukje javascript, dat wordt uitgevoerd zodra je op een button klikt. Dit werkt goed, behalve in firefox en safari. Als je dan op een button klikt gebeurd er niks.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
function delRow()
  {
    var current = window.event.srcElement;
    while ( (current = current.parentElement)  && current.tagName !="tr");
         current.parentElement.removeChild(current);
         count -= 1;
  }


De buttons waar dit wordt aangeroepen staan in een tr van een tabel.

Kan iemand me vertellen wat hier anders aan moet?
 
PHP hulp

PHP hulp

18/01/2025 11:29:35
 
Kris Peeters

Kris Peeters

04/02/2013 11:25:00
Quote Anchor link
Twee dingen:
window.event.srcElement en element.parentElement
Verschillende browsers gaan daar anders mee om.

.toLowerCase() ook niet vergeten. Sommige browsers gaan element.tagName in upper case zetten.

Wanneer je geen framework gebruikt, is het meestal wel zinnig om this en event mee te geven, bv. bij onclick (zie code).

Ik denk dat je dit wil bereiken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<head>
  <script>
    function delRow(current, e)
    {
      while ( typeof parent(current) != 'undefined') {
        if (current.tagName.toLowerCase() === "tr") {
          break;
        }
        current = parent(current);
      }
      parent(current).removeChild(current);
      //count -= 1;
    }
    function parent(elm) {
      return elm.parentNode         // firefox
             || elm.parentElement;  // IE, safari, ...
    }
  </script>
</head>
<body>
  <table>
    <tr><td>bla bla 1</td><td><button onclick="delRow(this, event)">Klik</button></td></tr>
    <tr><td>bla bla 2</td><td><button onclick="delRow(this, event)">Klik</button></td></tr>
    <tr><td>bla bla 3</td><td><button onclick="delRow(this, event)">Klik</button></td></tr>
    <tr><td>bla bla 4</td><td><button onclick="delRow(this, event)">Klik</button></td></tr>
  </table>
</body>


(merk op: frameworks zoals jQuery doen precies dit: zorgen dat alles (zo veel als mogelijk) het zelfde reageert in alle browsers)
Gewijzigd op 04/02/2013 11:44:00 door Kris Peeters
 
Tom aan t Goor

Tom aan t Goor

04/02/2013 19:47:50
Quote Anchor link
@Kris, bedankt voor je reactie.
Nu is het met firefox en safari opgelost.
Maar nu doet de browser opera het niet meer.
Kan je me hier verder mee helpen?
 
Kris Peeters

Kris Peeters

05/02/2013 10:04:58
Quote Anchor link
Ik heb (op deze pc) geen Opera.

Toch maar eens jQuery boven halen. Zoals eerder vermeld, regelt die (lastige) dingen waarvan webbrowsers vinden dat ze het anders hoeven te regelen dan de rest.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  <script>
    $(document).ready(function() {
      // cache elements
      var buttons = $('.delete_row');
      // events
      buttons.on('click', function(e) {
        // find parent <tr> and delete it
        var row = $(this).parents('tr');
        $(row).remove();
      });
    });
  </script>
</head>
<body>
  <table>
    <tr><td>bla bla 1</td><td><button class="delete_row">Klik</button></td></tr>
    <tr><td>bla bla 2</td><td><button class="delete_row">Klik</button></td></tr>
    <tr><td>bla bla 3</td><td><button class="delete_row">Klik</button></td></tr>
    <tr><td>bla bla 4</td><td><button class="delete_row">Klik</button></td></tr>
  </table>
</body>


(ik veronderstel dat Opera dit ook aanvaardt)
Gewijzigd op 05/02/2013 11:31:48 door Kris Peeters
 
Tom aan t Goor

Tom aan t Goor

05/02/2013 18:08:46
Quote Anchor link
@Kris, ik begrijp niet hoe het kan.

Het werkt wel, maar......

Ik heb ook een button om nieuwe rijen toe te voegen.

Nu werkt je script wel als de buttons al gemaakt zijn (dmv PHP). Maar als ik er één toevoeg met javascript, kan ik deze niet meer verwijderen, terwijl de button tag PRECIES het zelfde is.

Hieronder mijn javascript code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() {
      // cache elements
      var buttons = $('.delete_row');
      // events
      buttons.on('click', function(e) {
        // find parent <tr> and delete it
        var row = $(this).parents('tr');
        $(row).remove();
      });
    });
        $(document).ready(function(){
            $("#submit").click(function(e){
                e.preventDefault();
                $.post('saveagenda.php', $("form").serialize(), function(data){
                    alert("De wijzigingen zijn opgeslagen.")
                    //alert(data);
                    setTimeout("location.reload(true);",20);
                });
            });
        });
  var count = 1;
  function addRow(in_tbl_name)
  {
    var tbody = document.getElementById(in_tbl_name).getElementsByTagName("tbody")[0];
    // create row
    var row = document.createElement("tr");
    // create table cell 1
    
    // create table cell 2
    var td2 = document.createElement("td")
    var strHtml2 = '<input type="text" name="datum[]" maxlength="10">';
    td2.innerHTML = strHtml2.replace(/!count!/g,count);
    // create table cell 3
    var td3 = document.createElement("td")
    var strHtml3 = '<input type="text" name="tijd[]" maxlength="5">';
    td3.innerHTML = strHtml3.replace(/!count!/g,count);
    // create table cell 4
    var td4 = document.createElement("td")
    var strHtml4 = '<input type="text" name="wat[]" maxlength="255">';
    td4.innerHTML = strHtml4.replace(/!count!/g,count);
    // create table cell 4
    var td5 = document.createElement("td")
    var strHtml5 = '<input type="text" name="waar[]" maxlength="255">';
    td5.innerHTML = strHtml5.replace(/!count!/g,count);
    // create table cell 4
    var td6 = document.createElement("td")
    var strHtml6 = '<input type="text" name="wie[]" maxlength="255">';
    td6.innerHTML = strHtml6.replace(/!count!/g,count);
    // create table cell 4
    var td7 = document.createElement("td")
    var strHtml7 = '<select name="soort[]"><option value="1">Alles</option><option value="2">Optreden</option></select>';
    td7.innerHTML = strHtml7.replace(/!count!/g,count);
    // create table cell 5
    var td8 = document.createElement('td');
    td8.style.backgroundColor = "#FF0000";
    var strHtml8 = '<input type="button" class="delete_row" value="Verwijder agendapunt" />';
    td8.innerHTML = strHtml8.replace(/!count!/g,count);
    // append data to row

    row.appendChild(td2);
    row.appendChild(td3);
    row.appendChild(td4);
    row.appendChild(td5);
    row.appendChild(td6);
    row.appendChild(td7);
    row.appendChild(td8);
    // add to count variable
    count = parseInt(count) + 1;
    // append row to table
    tbody.appendChild(row);
  }
  
</script>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2013 18:27:38
Quote Anchor link
Op het moment dat het document geladen is krijgen de buttons met de class delete_row een onClick via JQuery
Maar buttons die je later toevoegt dus niet. Dit moet je dan 'handmatig' doen.
 
Tom aan t Goor

Tom aan t Goor

05/02/2013 18:35:46
Quote Anchor link
Ger van Steenderen op 05/02/2013 18:27:38:
Op het moment dat het document geladen is krijgen de buttons met de class delete_row een onClick via JQuery
Maar buttons die je later toevoegt dus niet. Dit moet je dan 'handmatig' doen.


Wat moet ik dan in het onClick="" zetten bij de 'nieuwe' buttons?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2013 18:44:42
Quote Anchor link
Niets, geef de button een id (uniek) en dan met jQuery hetzelfde doen als in document.ready behalve dan dat je het element via het id aanspreekt.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/02/2013 19:50:43
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <script>
        function removerow(el) {
            // find parent <tr> and delete it
            var row = $(el).parents('tr');
            $(row).remove();
        }
        $(document).ready(function() {
            // add_row button
            $('#add_row').click( function() {
                $('#myTable > tbody:last').append('<tr><td>nieuwe bla</td><td><button class="delete_row" onclick="removerow(this);">Klik</button></td></tr>');
                
            });
            // cache elements
            var buttons = $('.delete_row');
            // events
            buttons.on('click', function(e) {
                removerow(this);
            });
        });
    </script>
</head>
<body>
  <table id="myTable">
    <tr><td>bla bla 1</td><td><button class="delete_row">Klik</button></td></tr>
    <tr><td>bla bla 2</td><td><button class="delete_row">Klik</button></td></tr>
    <tr><td>bla bla 3</td><td><button class="delete_row">Klik</button></td></tr>
    <tr><td>bla bla 4</td><td><button class="delete_row">Klik</button></td></tr>
  </table>
  <button id="add_row">Nieuwe regel</button>
</body>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2013 20:26:14
Quote Anchor link
Frank, dat is niet wat Tom bedoelt. Dit gebeurt in zijn script ook al, alleen wordt dan aan iedere button met de class delete_row een click event gekoppeld. Maar dit logischer wijs alleen voor de buttons die bestaan, dus als je later een button toevoegt, zal je daar ook een click event aan moeten binden.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/02/2013 20:40:37
Quote Anchor link
Ger mijn code werkt. er zijn regels met buttons toe te voegen en weer te verwijderen. Op regel 12 wordt gebruik gemaakt van het onclick attribuut
 
Jersey van Velden

Jersey van Velden

05/02/2013 20:41:42
Quote Anchor link
In Firefox open je het webconsole door CTR+SHIFT+K in te drukken! Meestal zie je dan je Javascript error en kan je beginnen aan debuggen.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/02/2013 20:56:51
Quote Anchor link
@Frank, sorry niet goed gekeken.
 
Tom aan t Goor

Tom aan t Goor

06/02/2013 19:33:12
Quote Anchor link
Ik heb dit veranders/toegevoegd aan mijn code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
function removerow(el) {
            // find parent <tr> and delete it
            var row = $(el).parents('tr');
            $(row).remove();
        }
$(document).ready(function() {
      var buttons = $('.delete_row');
            // events
            buttons.on('click', function(e) {
                removerow(this);
            });


Maar ook nu kunnen net nieuwe rijen niet verwijderd worden.
Kan iemand nog een ander voorbeeld voor me maken?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

06/02/2013 21:01:35
Quote Anchor link
Tom, je mist dit nog in $(document).ready(function() {:

// add_row button
$('#add_row').click( function() {
$('#myTable > tbody:last').append('<tr><td>nieuwe bla</td><td><button class="delete_row" onclick="removerow(this);">Klik</button></td></tr>');

});


Toevoeging op 06/02/2013 21:02:32:

misschien moet je het andersom proberen: telkens een stukje van jouw code aan mijn code toevoegen..
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.