【问题标题】:YiiFramework - no javascript functions after ajax loadYiiFramework - ajax加载后没有javascript函数
【发布时间】:2014-02-24 08:52:39
【问题描述】:

我在 Yii 中有一个表单,想通过 Ajax 加载下一步。所以我有以下要求:

$.ajax({
url: jQuery("#form-1").attr("action"),
type: "POST",
data: jQuery(form).serialize()
}).done(function(data) {
jQuery("body").html(data);
});

该网址将我们引向以下内容:

$this->render('formStep2', array('model' => $model));

所以整个视图将被覆盖。 问题是,所有事件触发的 javascript 函数都不起作用。 (例如 afterValidateAttribute 以及鼠标悬停事件等)

如何让这些工作?

绑定代码例如:

jQuery("#collapsor").mouseover(function(e) {
...
 jQuery("#collapsing").collapse('show');
...
}

控制台说:“Uncaught TypeError: Object [object Object] has no method 'collapse'”(引导程序)。当我只使用 from bootstrap 建议的 html 代码(和单击)进行折叠时,它就可以工作了......

或者像我说的自动生成的Yii函数“afterValidateAttribute”等等,但根本没有控制台错误。

编辑:当我使用 document.write(ajaxContnent) 时,collapse-thing 正在工作,但没有动画并且 Yii 表单功能仍然无法正常工作......

【问题讨论】:

  • 如果你使用jquery,你应该'live'函数。例如:使用 $("#button").live('click', function () {});而不是 $("#button").click(function () {});对其他事件做同样的事情
  • 添加有问题的事件绑定代码
  • 带有“实时”功能的它也不起作用:(
  • 这样做很糟糕。最好尝试使用 ajaxSubmitButton,将表单 id 存储在隐藏字段中,如果保存表单,则使用 renderPartial() 步骤。关于问题 - 我几乎 100% 确定您正在覆盖事件或进行双重绑定。
  • ineersa:问题是,Yii 会在我渲染步骤时生成所需的脚本,所以我不能只执行部分渲染,可以吗?

标签: javascript php jquery ajax yii


【解决方案1】:

处理动态添加内容的方法是将事件附加到文档并定位您需要的事件和选择器。 使用jquery的on

jQuery('body').on("mouseover","#collapsor", function(e) {
   jQuery("#collapsing").collapse('show');
});

在此处阅读有关委托事件的更多信息:http://api.jquery.com/on/

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2016-06-29
    • 2019-09-30
    相关资源
    最近更新 更多