【问题标题】:Assist with javascript functions being contained within a loop (PHP)协助包含在循环中的 javascript 函数 (PHP)
【发布时间】:2014-09-05 21:19:14
【问题描述】:

我正在做一个项目,我在 mysql 数据库中存储了具有“部门 ID”和“部门名称”的部门;

我想要的是让我使用 php 来做一个“while”循环并遍历所有的部门;

然后为每个部门创建一个按钮,该按钮将触发一个 javascript 函数……

我已经对此进行了很多测试,所以我知道某些部分正在工作……;这是我的代码:

<p id="id57512">How are you?</p>

<script>
var g_myobj = {};
</script>

<?php

$result_g1 = mysql_query("SELECT * FROM divisions");

while($row = mysql_fetch_array($result_g1, MYSQL_BOTH))
{
$div_id=$row[div_id];
$div_name=$row[div_name];

$button_id="b";
$button_id.=$div_id;

$function_id="f";
$function_id.=$div_id;

?>

<button id=<?php echo $button_id; ?>><?php echo $div_name; ?></button>

<script>
var f_id='<?php echo $function_id; ?>';
var b_id='<?php echo $button_id; ?>';
var div_id='<?php echo $div_id; ?>';

var newFieldName = f_id;
var newFieldValue = function()    {document.getElementById("id57512").firstChild.nodeValue=gman_code1(div_id);};
g_myobj[newFieldName] = newFieldValue;


var gman_code1 = function(number) {
var result1 = number*2;
console.log(result1);
return result1;//add return statement
}

//define the behavior

document.getElementById(b_id).addEventListener("click", g_myobj[f_id] , false);

</script>

<?php
}

函数名必须是变量;但我想出了如何通过使其成为对象来做到这一点;因此可以通过这种方式访问​​不同的功能……

我基本上在没有循环的时候测试了这一切;我手动让它做所有事情两次(甚至在对象中创建函数)并且一切正常......

基本上,当您单击一个按钮时,它应该向该“p”容器发送一个数字并将其乘以 2

当我手动而不是循环时,我只是让它先创建对象 g_myobj,然后开始向对象添加项目......

但是现在我在循环中执行此操作 - 我觉得我无法在循环中创建空对象的语句,否则它将继续重新创建它;所以我越过了循环,在它自己的“脚本”标签中创建了对象……

那部分可能是这个问题,完全不确定......

另一个潜在的问题是我不确定我是否可以像这样在循环中完成所有这些操作

这是一个“php循环”,所以也许这一切都不能在这样的循环中完成……

发生的事情是第一个按钮有效,但其他按钮均无效......

所以,我希望有人能告诉我我在这方面做错了什么……

非常感谢...

【问题讨论】:

  • 将所需的属性存储为按钮上的数据属性。通过在 JavaScript 中使用事件委托,您只需要一个包含您需要的逻辑的函数。

标签: javascript php mysql loops


【解决方案1】:

如果您想要做的只是向&lt;p&gt; 发送一个数字并将其乘以2,请参阅这一线性函数。我假设您正在尝试完成的不仅仅是乘法的事情,否则您可能只需要完成一个简单的函数,如下所示......

另外,我相信你会得到很多 cmets,但你不应该再使用 mysql_ 函数了。它们都已弃用且可能不安全。您应该使用mysqliPDO 准备好的语句。

在您的按钮上,您可能应该在 id="yadayada" 周围加上引号,而不是 id=yadayada。 jQuery 可能是你的 js 处理函数或你有什么的好选择。

<p id="id57512">How are you?</p>
<?php

    $result_g1 = mysql_query("SELECT * FROM divisions");

    while($row = mysql_fetch_array($result_g1, MYSQL_BOTH)) {
            $div_id         =   $row[div_id];
            $div_name       =   $row[div_name];

            $button_id      =   "b$div_id";
            $function_id    =   "f$div_id"; ?>

    <button id="<?php echo $button_id; ?>" onClick="MyRadFunction('<?php echo $div_id; ?>')">

<?php echo $div_name; ?></button>

<?php   } ?>

<script>

     function MyRadFunction(DivId) {
            $("#id57512").html(DivId*2);
        //  var NewNum  =   $("#id57512").text();
        }
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/smoothness/jquery-ui.css" />
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"></script>

【讨论】:

  • 你好 Rasclatt:我试过这个,它部分工作;由于某种原因,每个按钮在您至少单击一次之前都不起作用;但是如果您再次单击它,它们就会起作用。有什么想法吗?
  • 你好 Rasclatt:看起来你收到了我的消息并编辑了这个 - 我刚刚尝试过,现在效果很好!很抱歉我没有早点看到这个,我没有密切关注。我希望我能让投反对票的人收回它。那好吧。非常感谢您的帮助!
  • 我认为我无能为力,至少我将其标记为正确答案应该会有所帮助...... :)
  • 我只是试图“投票赞成”它,但它说我需要 15 的声誉,而我只有 11...但是非常感谢...
  • 嘿,如果你回去给我投票,(我注意到你现在有 18 个代表)我很感激!!
【解决方案2】:

渲染按钮时,应将id 括在引号中,例如

&lt;button id='&lt;?php echo $button_id; ?&gt;'&gt;&lt;?php echo $div_name; ?&gt;&lt;/button&gt;

【讨论】:

    猜你喜欢
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多