【问题标题】:PHP array being passed to javascript function not doing anythingPHP数组被传递给javascript函数没有做任何事情
【发布时间】:2014-10-07 14:22:45
【问题描述】:

我有一个使用“json_encode($array)”传递给js函数的php数组,问题是当我点击按钮触发该函数时,除了页面刷新之外什么都没有发生。

我认为问题可能出在引号中,尽管我已经尝试过从双引号更改为单引号,反之亦然,没有乐趣。

HTML:

 <button class="button1" 
  onclick="validateEncomenda('<?php echo json_encode($chosen_restaurant_addr);?>');
           return false;">Encomendar</button>

js:

function validateEncomenda(myarray){
   alert('Hello JS');
  }

如果我回显“json_encode($chosen_restaurant_addr)” 我得到了这种格式的正确值:

["ipsum lorem blah blah","Curabitur aliquam feugiat tellus"]

任何帮助或提示将不胜感激。

【问题讨论】:

  • 向我们展示您要编码为 json 的数组。
  • 您在 json 中的双引号正在关闭 onclick 事件属性。 onclick="validateEncomenda('["
  • 对,好像是引号问题。你能发布json_encode($chosen_restaurant_addr)的计算值吗?

标签: javascript php arrays


【解决方案1】:

处理此问题的更好方法是将 onclick 处理与 HTML 源代码分开。你可以像这样创建一个脚本:

var chosenResturant = <?php echo json_encode($chosen_restaurant_addr);?>;
document.getElementById('button1').onclick = function() {
    // no need to parse JSON here as we created an array literal above
    alert(chosenRestaurant.length);
    return false;
};

这里请注意,我假设您将 id button1 添加到元素中,作为确定哪些元素获取事件处理程序的方法。如果您真的想将此行为附加到类名为button1 的所有元素,您只需替换getElementsByClassName('button1') 而不是getElementById('button1')

【讨论】:

  • 您在 json 周围缺少引号 ;)
  • @blue112 我不需要引号。我正在定义一个数组文字(正如我在代码示例中指出的那样)。
  • 哦,是的,它是 json,它在 js 中开箱即用,当然,我的错。
  • 对,唯一的问题是我将所有的 JS 都放在一个单独的文件中,并且我正在使用一个函数,因为在这种情况下它效果最好,因为我在 validateEncomenda( ) 函数。
  • @MichelFigueiredo 您仍然可以在静态 js 文件中定义 onclick 处理程序函数,并通过 PHP 在脚本标签内动态定义变量(本质上就是您现在在内联函数调用中所做的事情)。
【解决方案2】:

您应该转义 PHP 输出中的引号。由于 HTML 引用无法转义,因此重写如下:

onclick='validateEncomenda("<?php echo addslashes(json_encode($chosen_restaurant_addr)); ?>"); return false;'>

【讨论】:

  • 如果我删除“return false;”,这将有效返回 false 它告诉我“无效返回”作为语法错误。
【解决方案3】:

我认为你应该为按钮添加新属性:type="button"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2017-11-07
    • 2011-09-24
    • 2011-06-20
    • 1970-01-01
    相关资源
    最近更新 更多