zoukankan      html  css  js  c++  java
  • 操作ajax生成页面的一个问题

    一般而言,js代码都放在页面的底部。在做项目的过程中,发现放在底部的代码没有执行,原来操作的是ajax生成的部分。这时候,页面加载js的顺序就要小心了。例子如下:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    	<div id="ajaxContent"></div>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    	var param1="";
    	 var html = ''; 
    	 $.ajax({
                 type: "post",
                 url: "test.json",
                 data: {username:$("#username").val(), content:$("#content").val()},
                 dataType: "param1="+param1,
                 success: function(data){
                             $.each(data, function(commentIndex, comment){
                                   html += '<div class="comment"><h6>' + comment['username']
                                             + ':</h6><p class="para"' + comment['content']
                                             + '</p></div>';
                             });
                             $('#ajaxContent').append(html);
                          }
             });
    		 
    		 //操作ajax部分
    		 $('.comment').css('color','red');
    </script>
    </body>
    </html>
    

      

    Ajax没有完成,这时候,页面元素还不完整,操作ajax生成部分的代码其实已经执行了,而jquery没有选中页面元素又不会报错,参见:http://www.cnblogs.com/xiaochongchong/p/5497343.html 。

    解决方法:把底部的代码封装成一个函数,然后等待ajax请求成功,页面生成完整后。后调用这个函数。对上面例子的稍加修改:

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    	<div id="ajaxContent"></div>
    <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
    <script>
    	 var param1="";
    	 var html = '';
    	 
    	 //ajax请求 
    	 $.ajax({
                 type: "post",
                 url: "test.json",
                 data: {username:$("#username").val(), content:$("#content").val()},
                 dataType: "param1="+param1,
                 success: function(data){
                             $.each(data, function(commentIndex, comment){
                                   html += '<div class="comment"><h6>' + comment['username']
                                             + ':</h6><p class="para"' + comment['content']
                                             + '</p></div>';
                             });
                             $('#ajaxContent').append(html);
    						 //append成功后操作生成的部分
    						 operate();
                          }
             });
    		 
    		 //操作ajax部分,封装函数
    		 function operate(){
    		 $('.comment').css('color','red');
    		 }
    </script>
    </body>
    </html>
    

      

    总结:js操作ajax生成的部分。操作的代码,应该放页面生成之后。

    如果要对ajax生成的部分添加事件。除了上面的做法:在ajax数据获取到,append到整个页面中之后再添加。除此之外,还可以用事件代理的方法实现,原生js的可以实现,jquery也可以实现。

    Jquery事件代理(委托)主要用到两个方法:live(),delegate()。详细说明参考

    http://blog.csdn.net/xxd851116/article/details/8646899

  • 相关阅读:
    .NET程序内存分析工具CLRProfiler的使用
    Hudson、Jenkins的node节点设置(分布式处理自动化测试用例)
    Ruby+watir不能定位新打开的窗口解决办法
    L邮政挂号信查询
    ruby读写txt文件
    Jenkins、Hudson安装、配置详细记录
    nagios原理(二)
    存储过程例子
    存储过程 插入明细表
    nagios原理(一)
  • 原文地址:https://www.cnblogs.com/xiaochongchong/p/5511949.html
Copyright © 2011-2022 走看看