javaScript onClick不';当从另一页的DIV中加载的页执行时,无法工作

javaScript onClick不';当从另一页的DIV中加载的页执行时,无法工作,javascript,Javascript,我有两个页面:home.php和metrics.php 如果我直接加载metrics.php,并单击与此代码关联的按钮: <button class="btn btn-warning btn-sm dropdown-toggle" onClick ="$('#box-table-a').tableExport({type:'excel',escape:'false'});"> <img src='img/xls.png' width='24px'>Export Table

我有两个页面:home.php和metrics.php

如果我直接加载metrics.php,并单击与此代码关联的按钮:

<button class="btn btn-warning btn-sm dropdown-toggle" onClick ="$('#box-table-a').tableExport({type:'excel',escape:'false'});"> <img src='img/xls.png' width='24px'>Export Table Data</button>
导出表数据
它正确执行此tableExport javascript文件,并为我导出一个文件。

但是,我没有将metrics.php直接加载到地址栏中。我正在使用main.php上的下拉列表:

<select class="navbar-inverse" placeholder="Report" onchange="showPage(this.value)">
  <option value="/main.php">Report</option>
  <option value="/metrics.php">Metrics</option>
</select>

汇报
韵律学
然后通过以下javaScript函数将metrics.php填充到此main.php页面上的DIV中:

function showPage(str) {
  if (str !==".PM") {
    if (str=="") {
      document.getElementById("txtHint").innerHTML="";
      return;
    } 
  }
  $("#txtHint").load((str));
}
</script>
函数显示页(str){
如果(str!=“.PM”){
如果(str==“”){
document.getElementById(“txtHint”).innerHTML=“”;
回来
} 
}
$(“#txtHint”).load((str));
}
问题: 当我直接加载metrics.php,而不是在main.php上的DIV中加载时,是什么具体原因导致此按钮正常工作


我的控制台中没有任何错误,我只是单击按钮,什么也没发生。

我认为问题在于,在通过ajax加载子页面之前,事件onclick是绑定的,因此在创建新的HTML节点时不会绑定它们。 您可以使用jquery'函数绑定onclick。比如:

$(document).ready(function(){
  $("#your_node").live("click","your function here");

}))

听起来好像home.php上没有加载tableExport插件<代码>s在动态加载的HTML中未运行。如果您想让jQuery和tableExport插件在home.php上工作,那么必须将它们包含在home.php中,或者解析metrics.php的内容并手动
eval()
所有JavaScript

更新
刚想到这个解决方案:

$("#txtHint").load(str, function () {
    // check whether tableExport plugin is loaded
    if (typeof $.tableExport !== "function") {
        $.getScript("/path-to/tableExport.js");
    }
});

您是否尝试过用alert()替换onclick,以查看它是否与加载方式有关?(也就是说,javascript不是这样工作的吗?)嗯。。。因此,
onClick=alert(“yo”)
工作正常。所以有一些东西允许它运行,但不是
“$('#box-table-a')。tableExport({type:'excel',escape:'false'});“>我不知道那是什么……你试过添加'return false;'在您的onclick函数(aka
onclick=“myfunction();return false”
)之后,是否阻止执行任何其他操作?还有
#box-table-a
是否存在?我没有尝试过
返回:false
,但是当我将metrics.php加载到地址栏时,代码执行得很好-只是当它加载到main.php上的DIV中时没有#表a框确实存在。我得到了一个
未捕获类型错误:当我单击按钮时,undefined现在不是一个函数
错误。我在main.php和metrics.php页面上都加载了
。情况并非如此,因为onclick不关心“加载”。如果等待五秒钟直到加载整个DOM,那么onclick将完全按照它应该的方式启动。如果它被绑定到DOM之外,这是真的。那么@somethinghere,你认为是什么导致了这一点?我确信这是一件简单的事情,我只是还不明白(我还是有点新的),但我不明白…我不确定是什么原因造成的。单击控制台后,它会说什么?有什么错误吗?否则,尝试将
onclick
中的所有内容移动到一个单独的JS文件中名为
wrapperFunction()
的函数中,将其加载,然后调用
onclick=“wrapperFunction();return false;”
。我不能保证它会起作用,这就是为什么我不发布答案的原因。我不知道
return false
有什么作用,也不知道它的目的是什么——特别是当它在页面之外工作时-->#DIV设置我现在正在进行。是的,
#box-table-a
在metrics.php上。即使我做了这个更改,我仍然会得到相同的错误:
uncaughttypeerror:undefined不是一个有趣的函数
,因为我在main.php和metrics.php页面中都加载了脚本。让我试试这个解决方案,(我必须先找出它的位置,给我一分钟。)我会回来报告。它会进入你的
showPage
函数,取代当前的
。load((str))
。home.php中tableExport.js的路径正确吗?你确定它正在装货?