Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从ajax页面触发调用页面事件的最佳实践_Javascript_Jquery_Ajax_Javascript Events - Fatal编程技术网

Javascript 从ajax页面触发调用页面事件的最佳实践

Javascript 从ajax页面触发调用页面事件的最佳实践,javascript,jquery,ajax,javascript-events,Javascript,Jquery,Ajax,Javascript Events,我有一个页面列出了一堆文件。该页面可以通过URL直接访问,也可以通过ajax从其他页面加载到模式对话框中 如果文件页面是通过ajax加载的,我希望允许用户单击文件名并在加载文件页面的页面中触发操作。例如,有一个文章编辑页面。此页面包含“附加文件”按钮。当用户单击按钮时,文件页面将加载到模式对话框中,当单击文件名时,文件的id将插入到文章表单中,对话框将关闭。不过,也有一个事件编辑页面具有类似的按钮,但我希望在此页面上处理文件名单击事件的方式略有不同 我希望根据调用页面的不同,处理这些单击事件的方

我有一个页面列出了一堆文件。该页面可以通过URL直接访问,也可以通过ajax从其他页面加载到模式对话框中

如果文件页面是通过ajax加载的,我希望允许用户单击文件名并在加载文件页面的页面中触发操作。例如,有一个文章编辑页面。此页面包含“附加文件”按钮。当用户单击按钮时,文件页面将加载到模式对话框中,当单击文件名时,文件的id将插入到文章表单中,对话框将关闭。不过,也有一个事件编辑页面具有类似的按钮,但我希望在此页面上处理文件名单击事件的方式略有不同

我希望根据调用页面的不同,处理这些单击事件的方式略有不同。目前,我正在包含文件所附加到的表单的页面中定义一个具有全局作用域的处理函数,然后在文件名被单击时在文件页面中测试该函数,并调用它(如果存在)。它能工作,但感觉有点不舒服。对于这类事情,有什么我不知道的最佳实践吗


如果这能让事情变得更简单,我将使用jquery。

不依赖全局处理函数作为页面之间的接口,您可以依赖自定义事件:

“呼叫页面”:

$(document).bind("fileClicked", function(event, fileName) {
    alert(fileName);
});
$(".file").click(function() {
    $(document).trigger("fileClicked", [$(this).text()]);
});
“通过ajax加载页面”:

$(document).bind("fileClicked", function(event, fileName) {
    alert(fileName);
});
$(".file").click(function() {
    $(document).trigger("fileClicked", [$(this).text()]);
});
你应该看看

现在和将来,为与当前选择器匹配的所有元素将处理程序附加到事件

加载Ajax页面时,DOM不会以加载主页的方式处理它,因此使用live将在所有当前事件发射器以及将来的事件发射器(如动态Ajax内容)上附加事件

在Ajax模型中

<div>
    ...
    <a href="#" id="ajax_click_event">Add to main page</a>
    ...
</div>

我认为您需要定义您所称的“ajax”页面、“调用页面”和“不同位置”。更新-希望这有点清晰。如果这些页面使用ajax内容,您不必使用
$('entity')。live('name',callback)
@RobertPitt
live
没有必要。单击事件附加在通过ajax加载的页面上,而不是调用页面。