HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| <div class='voting'>
<div class='downvoting'>
<div class='downvotes_count_idvanitem'>3</div>
<form id='id_van_item' class="downvote_form" action="path_naar_controller" method="post">
<input type='submit' class='downvote' value='' />
</form>
</div>
<div class='upvoting'>
<div class='upvotes_count_idvanitem'>3</div>
<form id='id_van_item' class="left upvote_form" action="path_naar_controller" method="post">
<input type='submit' class="upvote" value='' />
</form>
</div>
</div> |
Samen met:
JavaScript:
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
| $(".downvoting").on('submit', '.downvote', function(e){
e.preventDefault();
var item = $(this).closest('.downvote_form');
//get the url for the form
var url= item.attr("action");
alert(item.attr('id') " " + url);
//start send the post request
$.post(url,{},function(data){
//the response is in the data variable
var id = item.attr('id');
alert(data.downvotes);
if(data.responseCode==200 ){
$('.downvotes_count_' + id).html(data.downvotes);
$('.downvotes_count_' + id).css("color","green");
}
else if(data.responseCode==400){//bad request
$('.downvotes_count_' + id).html(data.downvotes);
$('.downvotes_count_' + id).css("color","red");
}
else{
alert("An unexpeded error occured.");
$('.downvotes_count_' + id).html(data);
}
});
return false;
}); |
- Prevent default werkt niet meer. In de jsfiddle wel. (
deze
Ik zal even uitleggen wat ik denk dat hier gebeurt, waarbij ik me voor nu even toeleg op downvotes. Als die eenmaal werken is upvotes geen werk meer.
- Zet op iedere .downvoting div (die dus de form + submit knop wrapped) een listener. Op het moment dat er geklikt wordt op de .downvote submit knop, ga dan niet naar de action url uit het form (e.preventDefault() ) maar haal het form op wat gesubmit is en haal hier de url van op.
Post vervolgens naar die url, en haal dan het id op van het form.
Gebruik die id om downvotes_count bij te werken (in de goede regel, waar we dus het id voor nodig hebben).
Waar ga ik fout?
Ik zie namelijk geen verschil in structuur verder met de js fiddle.
Enige wat nog anders is is dat in de fiddle mijn .downvoting vaker dan 1x voorkomt in de html. (per rij 1 x ),
in de eerdere gelinkte webpagina met daarin de verschillen tussen delegate() live() on() etc. ([url="http://www.elijahmanor.com/2012/02/differences-between-jquery-bind-vs-live.html]deze [/url]) word er in iedergeval niet als potentieel probleem over gesproken.
Mis ik iets, of waren ze bij JQuery te lui om ook meervoudige aanwezigheid af te handelen? ;x
Heb overigens zowel 'submit' als 'click' geprobeerd.
[edit] Geloof dat ik en JQuery een haat-relatie tegemoet gaan. Nog nooit iets in 1x werkend gehad =P

(nog steeds niet trouwens)