Hi,

Als ik in PHP de volgende lus heb:


foreach (Svalues as $value):
...
echo '<td><input type="text" name="price" value="$value->price" data-num="' . $value->id . '" ></td>';
....
endforeach;


en de prijs wil ik posten via ajax.

mijn script ziet er zo uit: Echter als ik een prijs verander doet het, het alleen bij de eerste. Ik zie dat ik geen ID meegeef maar heb geen idee hoe ik die vanuit foreach naar JQuery plaats. Of moet ik het script mee laten lopen in de foreach lus?


 <script type="text/javascript">
                        $(document).ready(function() {
                            $('input[name=price]').live('change', function() {
                                var id = $('input[name=price]').data('num');
                                var value = $('input[name=price]').val();
                                $.ajax({
                                    url: "<?php echo site_url('products/changePrice') ?>",
                                    type: "POST",
                                    data: "priceb2c=" + value,
                                    success: function() {
                                        alert(id);
                                    }
                          });
            });
 });
</script>
Je geeft telkens dezelfde naam aan een input element, ik weet niet hoe JQuery daar mee omgaat, maar HTML technisch gezien is het niet correct. Wat wel kan is name="price[]".

Als je een eventlistener aan meerdere elementen hangt, kan je binnen de callback beter $(this) gebruiken:
[code lang="js"]
$('input[name="price[]"]').on('change', function() {
$.ajax({
url: '/products/changePrice',
type: 'post';
data: {priceb2c: $(this).val(), id: $(this).data('num')},
success: function(d) {
alert(d);
}
});
[/code]
Je laat dan je PHP script het id teruggeven.
Jennifer Van W op 13/06/2015 11:31:03
Ik zie dat ik geen ID meegeef maar heb geen idee hoe ik die vanuit foreach naar JQuery plaats.


geen -> een? Je geeft namelijk wel een id mee? data-num.

Deze kun je volgens mij in je change event-callback aanspreken met $(this).attr('data-num') die je vervolgens mee kan geven aan je AJAX-call als prijs-identifier.

(En wat Ger zegt - de veldnaam is op dit moment niet uniek)
Dank jullie wel!!!

Ik heb het nu zo en het werkt:



....
<td><input onchange="changePrice(<?php echo $value->id ?>)" type="text" id="price<?php echo $value->id ?>" name="priceb2c[]" value="11.95" data-num="<?php echo $value->id ?>" ></td>
.....


en script:

<script type="text/javascript">
function changePrice(id) {
      $('#price'+id).live('change',function () { 
        
        var value=$('#price'+id).val();
        var myKeyVals = { id : id, price : value };
        
       $.ajax({
                url: "<?php echo site_url('products/changePrice') ?>",
                type: "POST",
                data: myKeyVals, 

    });
   }
</script>


Weet je zeker dat het goed werkt?

In HTML voeg je een eventListener toe die de functie changePrice uitvoert.
In die functie doe je dat nogmaals met op dat zelfde element met .live (wat overigens een verouderde methode is). Binnen die laatste wordt de AJAX request uitgevoerd.

Wat er dus feitelijk gebeurt, is dat bij de eerste keer dat de change getriggerd wordt alleen de change eventListener toegevoegd. Met de nadruk op toegevoegd, want die je in de HTML gedefinieerd hebt is er ook nog steeds.
HI Ger,

Ik zie wat je bedoelt.

Het werkte wel, maar heb het direct veranderd.

Die tweede er volledig uit gehaald. groetjes en bedankt!!

Reageren