0

当通过 ajax 加载页面时,我很难让 jquery 触发事件触发。我有一个网页使用 jquery ajax 调用来调用另一个 php 文件上的表单

$('#orderFormPlace').load('orderForm.php');

在这个 PHP 页面上,有一个 change 事件附加到带有“checkMe”类的表单对象

这些表单对象是动态填充的,所以这就是我为此设置的

$( "table" ).delegate( ".checkMe", "change", function( e )

我需要开始工作的是以下代码来触发事件:

$("[id=vendor1]";).val($("[id=vendor1]").val()).focus().trigger("change");

谜团是......当我在同一个脚本上使用它时,它也可以完全按照我的意愿工作,但是当它被 AJAX 调用(jquery .load 函数)调用时,它不想工作。

为什么当我通过 AJAX 加载它时它不起作用?

我发现了这个,它声称有一种解决方法,但没有它声称拥有的演示或示例。关于使用 javascript document.getElementByID 和使用 jquery .index() 的一些事情。我试着摆弄它,但我不知道如何将 .index() 用作带有 javascript getElementByID 的选择器。

现在我想知道的是……这是什么魔法!?!?

非常感谢您的宝贵时间。


编辑:我通过硬编码代码解决了我的问题,而不是尝试触发更改来做同样的事情。但问题仍然存在,为什么会这样。

4

1 回答 1

0

我假设您正在生成 javascript 代码orderForm.php,您希望在执行 Ajax 请求时执行该代码。

我发现分离标记和脚本要容易得多 - 所以让文件orderForm.php只提供必要的标记,然后从您的主脚本中,将事件处理程序附加到(新加载的)元素。

如果您使用 Ajax 加载更多元素,您最终可能会遇到旧元素附加了事件处理程序而新元素没有附加的情况。要么清除所有它们并将它们重新分配给每个元素,要么使用jQuery 的 live() 函数,或者最好考虑将事件处理程序仅分配给父元素并通过 event.target 检查最初寻址的元素,减少事件处理程序的总数很大(“事件委托”)。

另外,我对提供的代码片段有疑问:

$("[id=vendor1]";).val($("[id=vendor1]").val()).focus().trigger("change");

让我们摆脱;并替换id=#

$("#vendor1").val( $("#vendor1").val() ).focus().trigger("change");

为什么将值设置为valval

于 2013-01-17T03:35:26.143 回答