【问题标题】:Need Javascript to locate individual divs looped by PHP需要 Javascript 来定位由 PHP 循环的单个 div
【发布时间】:2014-05-10 20:28:31
【问题描述】:

我设法创建了一个 PHP 循环,它接受一个数组并创建同一个按钮的多个副本,而每个按钮都有自己的标识(“adiv_1”、“adiv_2”、“adiv_3”等)。我有一个 javascript 函数,它能够“在它被称为 'adiv' 之前”获取一个按钮,并在单击它时更改按钮的文本。

但是,由于 PHP 循环将其命名为“adiv_1 或 adiv_2 或 adiv_3”,我不知道如何创建一个 javascript 函数,该函数可以使用循环使用不同标识 div 标记的按钮之一并获取 javascript 来识别如果单击该组中的某个按钮,则每一个。有人可以帮忙吗?

创建按钮组的 PHP 循环

<?php

$array_query = mysql_query("SELECT * FROM person_finder_info");

$i = 0;

while($search_row = mysql_fetch_array($array_query)){
?>
    <p><button type="button" onclick='load()'><div id='adiv_<?php echo $i?>'>Add this person</div></button></p>
<?php
$i++;
}
?>

更改按钮文本的 Javascipt / AJAX 函数(通过在 PHP 文件中获取回显信息)

//Changes button text to "You added him!"
function load(){                                    
    if (window.XMLHttpRequest){
        xmlhttp = new XMLHttpRequest();
    } else{
            xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
    }

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
            document.getElementById("adiv_1").innerHTML =      xmlhttp.responseText;
        }

    }

xmlhttp.open('GET','include.inc.php', true);
xmlhttp.send();

【问题讨论】:

    标签: javascript php ajax loops tags


    【解决方案1】:

    这是基本的,但我认为你正在尝试做这样的事情,只需像在另一个函数中一样在 onreadystatechange 函数内循环,以显示你想要在那里处理所有按钮的内容。:

    <?php
    for($i = 0; $i < count($array); $i++) 
    {
    ?>
        <p><button type="button" onclick='load()'><div id='adiv_<?php echo $i;?>'>Add this person</div></button></p>
    <?php
    }
    ?>
    
    <script>
    //Changes button text to "You added him!"
    function load(){                                    
        if (window.XMLHttpRequest){
            xmlhttp = new XMLHttpRequest();
        } else{
                xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
        }
    
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
        <?php
        echo "var divArray = {";
        for($i = 0; $i < count($array); $i++) 
        {
           echo "'adiv_".$i."'".($i < $count-1 ? "," : "");
        }
        echo "};" /// after the loop this will output like var divArray = {'adiv_1','adiv_2', ... };
        ?> 
    
        for (var i = 0; i < divArray.length; i++) {                         
            document.getElementById(divArray[i]).innerHtml(dataFromResponse[i]); // assuming you've processed the response from AJAX into an array
    
        }
      }
    }
    
    xmlhttp.open('GET','include.inc.php', true);
    xmlhttp.send();
    </script>
    

    我无法帮助您设置所有按钮 innerHTML,因为我不知道您从 AJAX 得到什么样的响应。这只是为了引导您朝着正确的方向前进。

    【讨论】:

    • 新的 javascript 已经设法让每个按钮现在都可以做某事了。但是,如果我单击任何一个按钮,所有按钮都会更改其文本,无论它们是否被单击。我怀疑这是因为所有按钮都具有相同的 onclick 函数“load()”,并且循环会导致所有按钮的 onclick 函数触发。我只需要激活某些而不是全部激活。有什么建议我应该如何解决这个问题?
    • 您必须添加一些 javascript 来处理 ajax 响应并使每个按钮的内部文本执行不同的操作。如果您使用 AJAX 数据样本更新您的问题,那么我可以为您提供一个方向。
    • 基本上“include.inc.php”中唯一的代码是“echo 'Person added!'”但我可能会更新代码,以便在我拥有它之前使用 mysql_query 更新数据库echo "已添加人员!"
    • 我对我的答案的编辑有点需要处理,但通读一遍,你应该能够弄清楚我想要做什么。这不一定是处理您正在尝试做的事情的最佳方式,但它会起作用。从那里开始,让事情变得更好。
    • 我可能应该在前面提到这一点,但是您介意编辑代码以使其适合此循环条件: $search_query = mysql_query("SELECT * FROM search_info");而 while($search_row = mysql_fetch_array($search_query)){ } 我将编辑原始帖子。你介意编辑以适应和添加这个循环吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多