Javascript delete functie werkt niet in IE

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Johnny Cash

Johnny Cash

09/02/2015 22:42:07
Quote Anchor link
Goedenavond,

Ik heb een probleem op een website waarop ik aan het testen ben.
Ik heb een eenvoudige aanroep in voor Javascript:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href='javascript:confirmDelete(\"/deletethisproduct/87\")' title='Dit product verwijderen'>verwijderen</a>


Vervolgens wordt het volgende script aangeroepen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
function javascript:confirmDelete(delUrl) {
  if (confirm("Weet u zeker dat u dit product wilt verwijderen?")) {
    document.location = delUrl;
  }
}


Na bevestiging (confirm) wordt de actie van verwijderen uitgevoerd.
Dit werkt, zoals het hoort, goed in Chrome en Firefox, maar in IE (versie 11) niet!

Wat werkt er dan niet?
Er gebeurd niets, er wordt geen confirmation gevraagd...

Hoe kan dat? Ik weet dat IE waardeloos is maar dit zou toch gewoon moeten werken?
 
PHP hulp

PHP hulp

06/05/2024 20:42:08
 
Thomas van den Heuvel

Thomas van den Heuvel

09/02/2015 23:03:28
Quote Anchor link
Dit komt mij zo bekend voor....

Ah... Zie dit topic.
 
Johnny Cash

Johnny Cash

10/02/2015 20:31:07
Quote Anchor link
Bedankt Thomas voor de reactie, maar dit lost het algehele probleem niet op.

Kun je mijn post over aantallen aanpassen in een winkelwagen met daarbij de verwerking via jquery?
Dat doet het ook perfect in Chrome en Firefox, maar NIET in IE.

Een product heeft bij het toevoegen aan de winkelwagen een $currentamount (van 1), men kan het aantal aanpassen met een getal tussen de 1 en de 30. Vervolgens drukken ze op wijzgen waardoor feitelijk de winkelwagen pagina opnieuw wordt getoond.

Stukje in winkelwagen.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input type='number' name='amountprod' value='$currentamount' class='amountprod' min='1' max='30' id='amountprod' /> <a href='/winkelwagen' class='editamount'>wijzig</a>


Stukje in javascripts.js
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$("#amountprod").bind("input", function() {
     var newprodamount = $(this).val();
     $.post( "/savenewamount.php", { newamount:newprodamount } );
});


Vervolgens stuurt dit stukje script het nieuwe aantal door naar savenewamount.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
   $checkamount = mysqli_real_escape_string($verbinding, $_POST['newamount']);
   if($checkamount <= 1){
    $amount = 1;
   }elseif($checkamount >= 30){
    $amount = 30;
   }else{
    $amount = $_POST['newamount'];
   }
  
   $sql  = "UPDATE winkelwagen SET aantal='$amount WHERE sessie_id='". $_SESSION["sessionid"] ."'";
   $result = mysqli_query($verbinding, $sql) or die ("Query mislukt: " . mysqli_error($verbinding));


Al dit werkt dus perfect in Chrome in Firefoxe, maar NIET in IE...
Waar gaat het fout?
Gewijzigd op 10/02/2015 20:43:34 door Johnny Cash
 
Thomas van den Heuvel

Thomas van den Heuvel

10/02/2015 23:03:06
Quote Anchor link
Is "input" een geldig event in je bind() functie?

Tevens:
- om waarden van properties moeten "dubbele quotes"
- de naam "wijzig" is een beetje misleidend, want dat is al gebeurd zodra je iets wijzigt in je input veld, althans ik neem aan dat dat de bedoeling is?
 
Johnny Cash

Johnny Cash

10/02/2015 23:10:55
Quote Anchor link
Of input een geldig event is in de bind() functie?
Euhm waarom niet? Het werkt in Chrome en Firefox, maar niet in IE...

De waarden van properties moeten tussen "dubbele quoates"
Het staat er officieel zo in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "<input type='number' name='amountprod' value='$currentamount' class='amountprod' min='1' max='30' id='amountprod' /> <a href='/winkelwagen' class='editamount'>wijzig</a>";

Dit is toch allowed?

De naam "wijzig" gebruik ik omdat aan de achterkant wel de actie wordt uitgevoerd, maar niet via jquery wordt terug gepost in de wnkelwagen pagina.

De winkelwagen.php wordt al ingeladen via een bestel.php pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
function berekentotaal()
{
  $.post("/winkelwagen.php", $('#shoppingcartform').serialize(), function(html)
  {
    $('#showwinkelwagentotaal').html(html);
  });
}
berekentotaal();


Op de pagina bestel.php staat: echo "<div id='showwinkelwagentotaal'></div>";

Ik kreeg het niet voor elkaar om in de winkelwagen.php ook een dergelijke functie zoals hierboven te bouwen.
Ik heb het idee dat wanneer ik dat doe (jquery post in een jquery post) dat het niet goed gaat...
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2015 00:12:25
Quote Anchor link
Quote:
Euhm waarom niet?

Quote:
The standard events in the Document Object Model are: blur, focus, load, resize, scroll, unload, beforeunload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, and keyup.

bron
Wijs het "input" event eens aan? En/of bekijk de definitie van bind() nog eens...

Quote:
Het werkt in Chrome en Firefox, maar niet in IE...

Dat maakt niet uit. Als je iets niet volgens de standaard doet, hoef je niet te verwachten dat het altijd werkt, zoals nu ook blijkt. Los bovenstaande eerst op, en kijk of je probleem dan nog steeds speelt.

Quote:
Dit is toch allowed?

Nee.
Gewijzigd op 11/02/2015 00:13:29 door Thomas van den Heuvel
 
Johnny Cash

Johnny Cash

11/02/2015 01:47:38
Quote Anchor link
Bedankt Thomas,

Ik heb ipv INPUT nu het event CHANGE gebruikt. Dat is namelijk het meest logische event. Er moet namelijk iets gebeuren zodra er iets veranderd.

Ik heb dit met het nieuwe CHANGE event getest, maar helaas... het gaat nog steeds niet goed in IE.
Ook heb ik de input echo gewijzgid in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo '<input type="number" name="amountprod" value="$currentamount" class="amountprod" min="1" max="30" id="amountprod" /> <a href="/winkelwagen" class="editamount">wijzig</a>';


Het blijft dus niet werken.

Toevoeging op 11/02/2015 12:49:38:

Vanochtend alweer vroeg begonnen, maar ik ben het spoort bijster...

Ik heb deze pagina meerdere malen over gelezen:
http://api.jquery.com/bind/

Ik heb alles opgegeven zoals het hoort met dubbele quotes etc.
Het werkt niet. Ben zo benieuwd of iemand hier een logische verklaring voor heeft.
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2015 13:39:44
Quote Anchor link
Een input veld van het type "number" is HTML5, ik weet niet in hoeverre IE dat (al) ondersteunt.

Los daarvan: als je je netwerktab in de gaten had gehouden dan had je gezien dat het "change" event in IE pas vuurt als het inputveld van waarde is veranderd, en de focus heeft verloren.

Het werkt dus wel, alleen wellicht niet op het moment dat jij verwachtte.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/02/2015 13:53:40
Quote Anchor link
JQuery docs:
As of jQuery 1.7, the .on() method is the preferred method for attaching event handlers to a document.

Niet dat het je probleem oplost, maar toch ;-)

Wat Thomas ook al aangeeft, niet alle browser reageren hetzelfde als bepaalde zaken niet op orde zijn.
Wat ik uit jou andere topic kan opmaken is dat je meerdere inputs kan hebben, en als dat het geval is mogen ze niet dezelfde name en id hebben.
De name kan je oplossen door er een array van te maken en de id kan via het data- attribuut:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input name="amountprod[]" ...... data-id="87" class="amountprod">


Hetzelfde geldt voor je verwijderen link:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="#" data-id="87" class="delete_product">


Dan in JS/JQuery:
Code (js)
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
$(".amountprod").on("change", function(){
    $.ajax({
        url: "/savenewamount.php",
        type: "post",
        data: {newamount: $(this).val(), product_id: $(this).data("id")},
        success: function(html){
            // hier wat je wilt doen
        }
    });
});


$(".delete_product").on("click", function(e){
    e.preventDefault();
    $.ajax({
        url: "/deleteproduct.php",
        type: "post",
        data: {product_id: $(this).data("id")},
        success: function(html){
            // hier wat je wilt doen
        }
    });

    return false;
});
    
 
Johnny Cash

Johnny Cash

11/02/2015 15:55:59
Quote Anchor link
Bedankt voor jullie input.

Ik ben er mee aan de slag gegaan en probeer het te begrijpen.
Ik heb de volgende dingen nu geprobeerd, zonder resultaat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$(".amountprod").on("change", function(){
    $.ajax({
        url: "/savenewamount.php",
        type: "post",
        data: {newamount: $(this).val(), product_id: $(this).data("id")},
        success: function(html){
            // hier wat je wilt doen
        }
    });
});


- Ik heb het INPUT TYPE veranderd in TEXT, ik het TYPE attribuut zelfs al weggehaald voor de test;
- Ik heb alle dubbele INPUT NAME verwijder zodat ik het nu maar met één INPUT NAME="amountprod" doe;

De verwerkingspagina is nog steeds goed (want in Chrome en Firefox werkt het!!):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
   $checkamount = mysqli_real_escape_string($verbinding, $_POST['newamount']);
   if($checkamount <= 1){
    $amount = 1;
   }elseif($checkamount >= 30){
    $amount = 30;
   }else{
    $amount = $_POST['newamount'];
   }
  
   $sql  = "UPDATE winkelwagen SET aantal='$amount WHERE sessie_id='". $_SESSION["sessionid"] ."'";
   $result = mysqli_query($verbinding, $sql) or die ("Query mislukt: " . mysqli_error($verbinding));


Ik heb met zowel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$(".amountprod").on("change", function(){

als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$("#amountprod").on("change", function(){

getest!

Ook heb ik verschillende EVENTS geprobeerd: change, focus, onclick etc.

Het blijft aan het einde van de rit NIET in IE (versie 11) werken maar wel in Chrome en Firefox, ook bovenstaande aanpassingen werken in Chrome en Firefox.

Toevoeging op 11/02/2015 15:57:06:

En ik gebruik jQuery v1.11.1
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2015 17:05:15
Quote Anchor link
Klik eens ergens willekeurig op een lege plek op je pagina nadat je de waarde hebt aangepast. En controleer dan eens of het wel effect had? Zoals ik eerder zei: als je in IE de waarde verandert, maar de focus / cursor blijft op je invoerveld staan, dan vuurt "change" niet.

Controleer ook in de developer tab van IE (F12) of er uberhaupt iets gePOST wordt. Druk daartoe wel op het "play" knopje om netwerkverkeer te volgen.
 
Johnny Cash

Johnny Cash

11/02/2015 17:17:20
Quote Anchor link
Dat eerste had ik ook al getest inderdaad om te kijken of de waarde veranderd zodra ik elders op de pagina klik. Dat is niet het geval.

Ik heb ook de IE developer tool zojuist gebruikt (bedankt voor de tip). Maar ik merk op dat wanneer ik de waarde voor aantallen verander dat er niets gebeurd...
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2015 17:26:09
Quote Anchor link
Dan snap ik niet wat er misgaat, want ik heb eerder code van jou geknipt en geplakt, en bij mij werkt het prima in IE11, of je nu bind() of on() gebruikt:

index.htm
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
<!DOCTYPE html>
<html>
<head>
<title>lala</title>
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
</head>

<body>
<form action="" method="">
<input type="text" name="amountprod" value="12" class="amountprod" min="1" max="30" id="amountprod" />
</form>

<script type="text/javascript">
//<![CDATA[
$("#amountprod").on("change", function() {
     var newprodamount = $(this).val();
     $.post( "whatever.php", { newamount:newprodamount } );
});
//]]>
</script>
</body>
</html>


whatever.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo time();
?>


Kijk eerst eens of dat werkt. Blokkeert IE op een of andere manier iets? Ik weet het anders ook niet.

Je hebt wel een "slash" voor "/savenewamount.php" staan, wellicht loopt er iets met paden mis?
 
Johnny Cash

Johnny Cash

11/02/2015 17:54:49
Quote Anchor link
Het lijkt erop dat dat stomme IE iets blokkeert en voor mij is het een raadsel.
Ja, ik heb ook wel een slash voor de bestandsnaam staan...

Einde is zoek, waarom is IE altijd een drama browser :((

Toevoeging op 11/02/2015 18:23:18:

Ok... ik heb nu iets gedaan waarbij het in zowel Chrome, Firefoxe als IE werkt...!

Ik heb hier wel vragen over, want ik wil snappen waarom het het één nu wel werkt en het ander niet.

Ten eerste heb ik nu de javascript functie uit het .js bestand gehaald en onderaan de pagina neergezet zoals ik ook bij Thomas zijn vorige post zag.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
script type="text/javascript">
//<![CDATA[
$("#amountprod").on("change", function() {
     var newprodamount = $(this).val();
     $.post( "whatever.php", { newamount:newprodamount } );
});
//]]>
</script>


Dit stukje code, met andere filename.php uiteraard, staat onderaan de winkelwagen pagina en nu werkt het in IE wel.
Waarom kan ik niet gewoon een javascript bestand .js includen zoals ik eerst had:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo "<script type='text/javascript' src='/javascripts/winkelwagen.js'></script>";


In dit bestand staat EXACT hetzelfde als wat ik nu als los stukje onderaan het winkelwagen script hebt gezet.

En wanneer gebruik ik:
//<![CDATA[

Wat is hier precies de functie van. Want het werkt zowel met als zonder dezeze CDATA.

Ik begrijp nog steeds niet waarom het nu wel werkt in IE, maar het feit is dat het werkt...
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2015 19:43:28
Quote Anchor link
Nog beter:

zet er het volgende omheen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$().ready(function() {
  // je code hier
});


Dat zorgt ervoor dat je JavaScript code pas uitgevoerd wordt als je document volledig geladen is.

Misschien probeer je in IE events te koppelen aan HTML-elementen die nog niet bestaan omdat je HTML-document nog niet (volledig) is (in)geladen.

EDIT: als je die ready check eromheen zet kun je het wel in een js bestand zetten en includen in je head-tag zonder problemen waarschijnlijk.

CDATA-blokken moeten bij mijn weten om inline JavaScript gezet worden. De reden ben ik inmiddels vergeten. Je zou eens kunnen googlen op de correcte manier, volgens mij kom je dan nog een heleboel andere varianten tegen.

EDIT2: stond dit javascript bestand waar je je code uitgehaald had NA de regel waarin je jQuery had ingeladen, of ERVOOR? :)
Gewijzigd op 11/02/2015 19:56:38 door Thomas van den Heuvel
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

11/02/2015 20:09:06
Quote Anchor link
CDATA is voor inline js in XHTML, in HTML5 is het normaal gesproken niet meer nodig. Maar het kan geen kwaad om het erin te zetten. Het heeft te maken met het parsen van < en &.

Overigens is het helemaal niet nodig om externe javascript bestanden in de head te zetten, dit kan ook op elke willekeurige plek binnen de body (maar bij voorkeur net voor de body endtag).
 
Johnny Cash

Johnny Cash

11/02/2015 22:10:46
Quote Anchor link
Thnx guys voor jullie reacties.

Dan zet ik er
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$().ready(function() {

omheen, want dan kan ik in ieder geval comment lines kwijt.

Het javascript bestand stond eerst bovenin de winkelwagen pagina.
Nu staat het onderin de winkelwagen pagina en werkt het.

Wanneer zet ik een javascript onderaan en wanneer bovenaan...?
 
Thomas van den Heuvel

Thomas van den Heuvel

11/02/2015 22:23:01
Quote Anchor link
Als je $().ready( ... ) gebruikt zou dat niet uit moeten maken.

EDIT: maar het is handig / verstandig om inline JavaScript (als je om een of andere reden hier niet omheen kan) aan het einde van je document te zetten (voor je </body> tag) buiten andere HTML-elementen (zoals Ger al aangaf zie ik net :)).
Gewijzigd op 11/02/2015 22:40:09 door Thomas van den Heuvel
 



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.