PHP DOM生成的Ajax新输入字段

时间:2018-05-14 12:13:02

标签: javascript php html ajax

我是一名学习Ajax的学生,用于更改使用PHP DOM生成的输入字段的值。 以下是生成表行的代码。

<?php
                    $totalval = 0;
                    foreach($_SESSION as $name=>$value){
                        $total = 0;

                        if(substr($name,0,5) == "item_"){
                            $id = substr($name,5,4);
                            $cart_xml= new DomDocument;
                            $cart_xml->Load('prod_db.xml');

                            $root=$cart_xml->getElementsByTagName('root')->item(0);
                            $product=$root->getElementsByTagName('product');

                            foreach($product as $prod){
                                $itms_id=$prod->getElementsByTagName('prod_id')->item(0)->nodeValue;
                                $itms_categ=$prod->getElementsByTagName('prod_categ')->item(0)->nodeValue;
                                $itms_imgsrc=$prod->getElementsByTagName('prod_imgsrc')->item(0)->nodeValue;
                                $itms_name=$prod->getElementsByTagName('prod_name')->item(0)->nodeValue;
                                $itms_price=$prod->getElementsByTagName('prod_price')->item(0)->nodeValue;
                                $itms_stock=$prod->getElementsByTagName('prod_stock')->item(0)->nodeValue;

                                if($id==$itms_id){
                                    $price = floatval($itms_price);
                                    $total=$price*$value;
                                    ?>
                                    <tr>
                                        <td><img src="<?php echo $itms_imgsrc?>" class="citemimg"/></td>
                                        <td>
                                            <p class="prodname"><?php echo ucfirst($itms_name);?></p>
                                            <p class="prodcateg"><?php echo ucfirst($itms_categ)?></p>
                                            <p class="prodprice"><?php echo "Php. ".number_format($itms_price,2)?></p>
                                        </td>
                                        <td class="cartAmount;">

                                            <img onclick="ajaxMinus('<?php echo $itms_id;?>','<?php echo $itms_stock;?>')" class="carticons" src="images/logos/Minus_r_50px.png"/>

                                            <input type="number" min="1" max="<?php echo $itms_stock;?>" class="cartqty" id="itmQty<?php echo $itms_id;?>" value="<?php echo $value; ?>" disabled>

                                            <img onclick="ajaxAdd('<?php echo $itms_id;?>','<?php echo $itms_stock;?>')" class="carticons" src="images/logos/Add_r_50px.png"/>
                                        </td>
                                        <td><?php echo "Php. ".number_format($total,2);?></td>
                                        <td>
                                            <a href="cart_actionCart.php?del=<?php echo $itms_id;?>&maxval=<?php echo $itms_stock;?>">
                                                <img class="carticons" src="images/logos/Remove_r_50px.png"/>
                                            </a>
                                        </td>
                                    </tr>
                                    <?php
                                }
                            }
                            $totalval+=$total;
                        }
                    }
                ?>

我通过添加

使我的图片标签可以点击
`onclick="ajaxMinus('<?php echo $itms_id;?>','<?php echo $itms_stock;?>')"` 

我也加上

`onclick="ajaxAdd('<?php echo $itms_id;?>','<?php echo $itms_stock;?>')"`

这是我对ajaxAdd的简单功能

function ajaxAdd(id,maxqty){
        if(window.XMLHttpRequest){
            xhrAdd=new XMLHttpRequest();
        }
        else{
            if(window.ActiveXObject){
                try{
                    xhrAdd=new ActiveXObject("Microsoft.XMLHTTP");
                }
                catch(e){}
            }
        }
        if(xhrAdd){
            xhrAdd.onreadystatechange=minusQty;
            xhrAdd.open("GET","cart_actionCart.php?add="+id+"&maxval="+maxqty,true);
            xhrAdd.send();
        }
        else{
            alert("Couldn't create an XMLHttpRequest");
        }
    }
    function minusQty(){
        if(xhrAdd.readyState == 4 && xhrMinus.staus == 200){
            document.getElementById('itmQty'+id).value = xhrAdd.responseText;
        }
    }

这是有效但我的问题是输入值没有改变,直到我刷新页面,我的问题在哪里?非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

通过AJAX加载的任何东西都没有监听器,除非父元素首先出现在那里。

作为一个例子,我有一个表单HTML来自AJAX,并且datepicker不起作用,直到我更改了原始代码:

$('.datepicker').datepicker();

对此:

$("body").on("focusin", ".datepicker", function(){
        $(this).datepicker();
});

因为身体总是存在,所以听众现在可以工作了。这可能也是你的问题,所以我建议你试着调整你的听众。