js---jQuery--动态增加html片段,会再次触发$(fn);函数

/**

*家庭成员列表
*/
$(function(){
homeMemberList.init();
});

var homeMemberList = (function(window, $, undefined){

//初始化
function init(){
initAddDialogContent();
}


function initAddDialogContent(){
var homeMemberAddHtml = null;
$.ajax({
url:'homeMemberDialogAdd.html',
type:'get',
dataType:'text',
async:false,
success:function(data){
homeMemberAddHtml = data;
}
});
$('body').append(homeMemberAddHtml);//动态的添加html片段,会使jQuery再次调用$(fn); wjli add 20130512

homeMemberDialogAdd.initAddDialog();
}

//公共函数
_homeMember.init = init;
_homeMember.loadHomeMemberData = loadHomeMemberData;
return _homeMember;

})(window, jQuery);


问题:

$(fn); 即为:jQuery中$(document).ready()的简写方式,允许你绑定一个在DOM文档载入完成后执行的函数。

这样当在function initAddDialogContent(){}方法中动态载入html片段完成时,会再次调用$(fn); 这样dialog就载入了2次。最终导致无法获得dialog中输入的值。

因为每个输入口都有2份,id相同。所以要解决这个方法就必须解决dialog载入2次的问题。

$('body').append(homeMemberAddHtml);

document.getElementById('bodyLevel').innerHTML = homeMemberAddHtml; 原理一样,都有引起再次调用$(fn);


解决载入2次的方法:

var homeMemberList = (function(window, $, undefined){

var _homeMember = {};

var _inited = false;//是否已经初始化[true=是|false=否],防止动态加载html片段时,jQuery再次调用init

//初始化
function init(){
if(!_inited){
initAddDialogContent();
_inited = true;
}else{
return;
}

}


function initAddDialogContent(){
var homeMemberAddHtml = null;
$.ajax({
url:'homeMemberDialogAdd.html',
type:'get',
dataType:'text',
async:false,
success:function(data){
homeMemberAddHtml = data;
}
});
$('body').append(homeMemberAddHtml);//动态的添加html片段,会使jQuery再次调用$(fn); wjli add 20130512

homeMemberDialogAdd.initAddDialog();
}


//公共函数
_homeMember.init = init;
_homeMember.loadHomeMemberData = loadHomeMemberData;
return _homeMember;

})(window, jQuery);

目前没有找到好的方法,只能这样解决了。


最后补补课,补充一下jQuery基础知识:

$(fn)

$(document).ready()的简写方式,允许你绑定一个在DOM文档载入完成后执行的函数。这个函数的作用如同$(document).ready()一样,只不过用这个函数时,需要把页面中所有其他的$()操作符都包装到其中来。从技术上来说,这个函数是可链接的--但真正以这种方式链接的情况并不多。你可以在一个页面中使用任意多个$(document).ready事件。

要详细了解ready事件,见ready(Function)。

返回值:jQuery

参数:

  • fn (Function): 当DOM载入完成后要执行的函数
 

 

示例:

当DOM就绪可用时,执行其中的函数。

jQuery 代码:

$(function(){ // DOM文档已经载入就绪 });


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
jQuery 中,`change` 事件可能被重复触发,这是因为它在元素失去焦点的时候被触发,而在某些情况下,元素失去焦点的次数可能很多。 为了解决这个问题,可以使用 `debounce` 或 `throttle` 函数来限制事件触发的次数。这两个函数都可以在一定时间内只执行一次函数,从而减少事件的触发次数。 下面是一个使用 `throttle` 函数来解决 `change` 事件重复触发的示例代码: ```javascript $(document).ready(function () { // 定义 throttle 函数,限制函数在一定时间内只执行一次 function throttle(fn, delay) { var timer = null; return function () { var context = this, args = arguments; clearTimeout(timer); timer = setTimeout(function () { fn.apply(context, args); }, delay); }; } // 绑定 change 事件,使用 throttle 函数限制事件触发的次数 $('input[type="checkbox"]').on( 'change', throttle(function () { console.log('Checkbox changed.'); }, 1000) ); }); ``` 在上面的代码中,我们定义了一个 `throttle` 函数,它接受一个函数和一个延迟时间作为参数。在函数内部,我们使用了一个定时器来延迟函数的执行,如果在延迟时间内,函数被多次调用,那么只有最后一次调用能够执行。 然后,我们使用 `throttle` 函数来绑定 `change` 事件,并且设置延迟时间为 1000ms。这样,当复选框被点击时,事件只在 1000ms 后被触发一次,从而解决了重复触发的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿竹痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值