jquery load加载页面内ajax返回的div不能响应页面js的问题的解决方案

1. 前言

由于项目需要,需要load一个页面并保持ajax返回的div能响应其页面内的JS的click事件。这个不是 解决用jquery load加载页面到div时,不执行页面js的问题 这类问题,因为并无这个问题存在(jquery版本:1.10.2.js)。

2. 本质原因

假定页面内有$(.btn1).click(function(){})事件,你手动复制一个包含class为btn1的div到页面(ajax返回后加入的div),然后会发现你点击那个div,并不会被响应,如果你在console执行$(.btn1)确实有包括新添加的div,这个问题就在于当前的div没有被绑定到那个事件中。

标题的问题,本质就是上面描述的问题。

3.解决方法

之前的代码

$(document).ready(function(){
    $('[id^="modifySettings_"]').bind("click",function(){
        //some code
    }
}

修改后的代码

//此函数变量得放在ready方法外面,否则也不能被响应
var registerClickCheckbox = function(){
	 $('[id^="modifySettings_"]').bind("click",function(){
            //some code		
	}

$(document).ready(function(){
    //new add
    registerClickCheckbox();

$.ajax({
	   type: "POST",
	   url: "/MyProject/settingl?mode=addItem
	   data: $("#addNewItem").serialize(),
           dataType: "json",
	   success: function (data) {
        		$('#div0').after('<div id="modifySettings_'+data.id+'" value="'+data.value+'">new item</div>');
            //重新绑定click操作 
            registerClickCheckbox();
	        	},
	   error: function(data) {
	        	alert("error:"+data.responseText);
	        	}
	      });                      

}
                

4. 其它(可跳过,纯记录)

如果load页面里面有两个tab,而且两个tab共用部分的代码,另一个页面要加载这页面的两个tab时,对$.tab方法使用可以稍微变通处理,不需要两个tab都加载子页面,只需加载一个,然后另一个用js来控制达到功能和预期一样即可。

var tabsData = [{"id" : "tabs_basic"},
                       {"id" : "tabs_2"},
                       {"id" : "tabs_3"},
                       {"id" : "tabs_loadsub1"},
                       {"id" : "tabs_loadsub2"}];

function hideAllTabs(){
	for(var i=1; i<10;i++){
	var evalStr = "$('[role=\"tabpane'+i+'\"]').hide()";			
	eval(evalStr);			
	}
	$('[role="presentation"]').removeClass('active');
			
	}

function showTabs(tabsId) {
			hideAllTabs();
			if(tabsId != 'tabs_sub1'){
				$("#"+tabsId).show();
				$("a[href='#"+tabsId+"']").tab('show');
			}else{
				$('#tabs_sub2').show();
				$('[href="#tabs_sub1"]').parent().addClass('active');
			}
			    
		}

function tabsHandler(event) {    
	var data = event.data;   
	showTabs(data.id);  
			
	timeOut = setTimeout(function(){
		$.ajax({
			type: 'POST',
			data: {
			mode:'saveSettingTabIndex', 
			tabId:data.id
			},
			url : './siconfig',
			success : function(msg) {
			}
			});		
		}, 100);
		return false; 
	}

$(document).ready(function() {		
			
	$(tabsData).each(function(){    
	    $("a[href='#"+this.id+"']").bind('click',{id : this.id},tabsHandler);
	});
			
	var tabId = '<%= Utils.getSettingTabIndex() %>';
	for(var index in tabsData){
	if(tabsData[index].id==tabId)
		showTabs(tabsData[index].id);
	}
}

 

转载于:https://www.cnblogs.com/fanbi/p/7581685.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值