包含的 php 文件中的 jQuery 选择器不起作用

Posted

技术标签:

【中文标题】包含的 php 文件中的 jQuery 选择器不起作用【英文标题】:jQuery selector in included php file not working 【发布时间】:2020-07-10 15:13:51 【问题描述】:

我做了一个简单的网站来管理和显示项目。对于我的问题,知道有 3 个文件就足够了:

    admin-dashboard.php 显示项目和管理功能(减少数量,增加 ecc。)

<?php
	include("includes/header.php");
	include("dbqueries/db-connection.php");
	include("includes/alerts.php");
?>
...
    dashboard-utilities.js 包含实现第 1 点的所有 javascript 函数

...
// Reduce quantity button script
function reduceQuantity(item) 
	$.ajax(
	    method: 'get',
	    url: '../dbqueries/reduceQuantity.php',
	    data: 
	        'current_item': item,
	    ,
	    success: function() 
	    	//alert("Quantità di " + "\"" + item + "\"" + " diminuita!");
	    	$('#reduceqty-modal').modal('show'); 
	    	// Reload page after closing the modal alert
	    	$('#reduceqty-modal').on('hidden.bs.modal', function () 
	    	 	window.location.reload();
	    	)
	    
	);

...
    alerts.php 将包含所有引导模式警报以显示操作成功(即“数量已更新!”)

<!-- Reduce quantity modal -->
<div id="reduceqty-modal" class="modal" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Quantità ridotta</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <p>Modal body text goes here.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary">Save changes</button>
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>
...

所以问题是reduceQuantity 函数的“成功”部分不起作用。特别是不显示模态。

我认为 jQuery 找不到它的选择器,因为它在包含的文件中 (alerts.php)。我是这么认为的,因为如果我将警报代码直接放入主文件 admin-dashboard.php 一切正常。

提前谢谢你!

【问题讨论】:

dashboard-utilities.js 如何(以及在​​何处)被收录?某处有&lt;script 标签吗? _"我认为 jQuery 找不到它的选择器,因为它在包含的文件中 (alerts.php)") ...这应该不是问题,只要来自警报的 html .php 在执行reduceQuantity() 函数之前加载到页面中。并且应该是,如果所有这些文件都包含在 PHP 中,那么它们应该同时发送到浏览器并在页面首次加载时加载。唯一的问题是如果 reduceQuantity() 在脚本标签加载时立即执行,在浏览器有机会加载模态的 HTML 之前。 P.S.你的控制台有什么错误吗? “成功”部分中的其他代码是否有效?例如如果您在其中添加其他命令(例如到 alert() 或 console.log) 首先谢谢你。 dashboard-utilities.js 包含在 &lt;body&gt; 关闭 admin-dashboard.php 之前。控制台没有错误。 reduceQuantity 有效,唯一无效的是模态。 涵盖这一点:“我认为 jQuery 找不到它的选择器,因为它在包含的文件 (alerts.php) 中。” - jquery 看到浏览器看到的内容- 这是一个 single HTML 文件。只要“包含的文件”正在输出,那么 jquery 就能够看到它 - 所以看起来它没有被包含/输出。尝试查看源代码以查看您的模态是否存在。您还可以删除一些类(例如 class=modal),您应该会在呈现的输出中看到它。 【参考方案1】:

...问题与服务器有关。文件alerts.php 没有正确的权限和正确的所有者。当你说它可能没有真正包括在内时,我注意到了。

抱歉浪费了大家的时间,谢谢大家!

【讨论】:

【参考方案2】:

听起来reduceQuantity() 函数找不到模态元素,因为该函数在 HTML 元素被解析之前正在运行。这可能是因为您需要将 JQuery 包装在 $(document).ready(function()) 中,或者您需要在 admin-dashboard.php 文件的末尾包含 Javascript(在结束 &lt;/body&gt; 标记之前),然后将 alerts.php 放在top 以便在 Javascript 运行之前对其进行解析。您可能需要同时做这两件事。

【讨论】:

谢谢你,但它已经按照你说的设置好了。该问题与服务器端文件权限有关。 alerts.php 文件其他人无法读取,因此无法包含(实际上浏览器不存在该文件)。 啊啊啊我明白了!我很高兴你把它修好了@AlanQuaino =)

以上是关于包含的 php 文件中的 jQuery 选择器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

动态 Jquery 选择器不起作用

JQuery-UI 日期选择器不起作用

选定的选择器不起作用

Jquery $('class', this) 选择器不起作用

日期选择器不起作用[重复]

jQuery不是选择器不起作用