谁能帮我写一个点击按钮后提示正在加载,然后js get json返回的数据。插入指定DIV中

谁能帮我写一个点击按钮后提示正在加载,然后js get json返回的数据(本服务器,没有跨域)。然后把内容分别插入到load DIV中
。我自己找了好多试了都没有效果,没有办法才来发帖子的。在此先感谢了

<div id="load">正在加载...</div> 

返回格式如下,

 {"ok":true,"ww":"yybb","text":"爱我中国"}

4个回答

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title> 页面名称 </title>
</head>
<body>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<input type="button" value="加载" onclick="loadjson();" />
<div id="load" style="display: none;">正在加载...</div>

<script type="text/javascript">
function loadjson() {
    $("#load").show();
    $.ajax({
        url: "url.json",
        type: "get",
        dataType: "json",
        success: function (data) {
            $("#load").text(data.text);
        },
        error: function (jqXHR, status, thrown) {
            alert(thrown);
        }
    });
}

</script>
</body>
</html> 
weixin_41959390
梅川酷芷 非常感谢!!!
一年多之前 回复
jslang
天际的海浪 注意:这个代码要放到服务器上运行,因为现在的浏览器都是默认禁止用ajax加载客户端文件的。
一年多之前 回复

页面代码

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>loading demo</title>
    <link href="loading.css" rel="stylesheet" type="text/css"/>
    <script
            src="https://code.jquery.com/jquery-1.12.4.js"
            integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="
            crossorigin="anonymous"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#submit').click(function () {
                $.ajax({
                    //获取数据的url
                    url: 'data.json',
                    beforeSend: function () {
                        //弹出遮挡层
                        $('#mloading-div').addClass('active');
                    },
                    success: function (data) {
                        //移除遮挡层
                        $('#mloading-div').removeClass('active');
                        //结果数据插入div中
                        $('#result-display').html(data.text);
                    }
                });
            })
        });
    </script>
</head>
<body>
<div>
    <button id="submit">submit</button>
</div>
<!-- 结果数据展示层 -->
<div id="result-display"></div>

<!--加载提示层 -->
<div id="mloading-div" class="mloading mloading-full mloading-mask">
    <div class="mloading-body">
        <div class="mloading-bar">
            <span class="mloading-text">正在加载...</span>
        </div>
    </div>
</div>
</body>
</html>

loading.css

 .mloading-container {
    position: relative;
    min-height: 70px;
    -webkit-transition: height 0.6s ease-in-out;
    -o-transition: height 0.6s ease-in-out;
    transition: height 0.6s ease-in-out;
}
.mloading {
    position: absolute;
    background: #E9E9E8;
    font: normal 12px/22px "Microsoft Yahei", "微软雅黑", "宋体";
    display: none;
    z-index: 1600;
    background: rgba(233, 233, 232, 0);
}
.mloading.active {
    display: block;
}
.mloading.mloading-mask {
    background: rgba(233, 233, 232, 0.75);
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=75);
}
.mloading-full {
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
}
.mloading-container > .mloading {
    top: 0px;
    left: 0px;
    width: 100%;
    height: 100%;
}
.mloading-body {
    width: 100%;
    height: 100%;
    position: relative;
}
.mloading-bar {
    width: 250px;
    min-height: 22px;
    text-align: center;
    background: #fff;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.27);
    border-radius: 7px;
    padding: 20px 15px;
    font-size: 14px;
    color: #999;
    position: absolute;
    top: 50%;
    left: 50%;
    margin-left: -140px;
    margin-top: -30px;
    word-break: break-all;
}
@media (max-width: 300px) {
    .mloading-bar {
        width: 62px;
        height: 56px;
        margin-left: -30px !important;
        margin-top: -30px !important;
        padding: 0;
        line-height: 56px;
    }
    .mloading-bar > .mloading-text {
        display: none;
    }
}
.mloading-bar-sm {
    width: 62px;
    height: 56px;
    margin-left: -30px !important;
    margin-top: -30px !important;
    padding: 0;
    line-height: 56px;
}
.mloading-bar-sm > .mloading-text {
    display: none;
}
weixin_41959390
梅川酷芷 非常感谢你,楼上的答案和我的程序正好对接上。所以采纳了他的。
一年多之前 回复

<!doctype html>



页面名称

正在加载...
function loadjson() { $("#load").show(); $.ajax({ url: "url.json", type: "get", dataType: "json", success: function (data) { $("#load").text(data.text); }, error: function (jqXHR, status, thrown) { alert(thrown); } }); }


<!DOCTYPE html>



loading demo

src="https://code.jquery.com/jquery-1.12.4.js"<br> integrity="sha256-Qw82+bXyGq6MydymqBxNPYTaUXXq7c8v3CwiYwLLNXU="<br> crossorigin="anonymous">
<br> $(document).ready(function () {<br> $(&#39;#submit&#39;).click(function () {<br> $.ajax({<br> //获取数据的url<br> url: &#39;data.json&#39;,<br> beforeSend: function () {<br> //弹出遮挡层<br> $(&#39;#mloading-div&#39;).addClass(&#39;active&#39;);<br> },<br> success: function (data) {<br> //移除遮挡层<br> $(&#39;#mloading-div&#39;).removeClass(&#39;active&#39;);<br> //结果数据插入div中<br> $(&#39;#result-display&#39;).html(data.text);<br> }<br> });<br> })<br> });<br>

submit
正在加载...


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
点击 Javascript 中的按钮显示 DatePicker
我想加载一个 html 文件到 WebView,在 html文件上有一个按钮来选择日期。当我点击按钮时,我想打开日期选择器对话框。再选择日期后,我想在html文件中显示选择的日期。如何实现? HTML : <input type="button" value="Select Date" onClick="openDatePickerDialog()" /> <p id = "date">--</p> Javascript : function openDatePickerDialog() { AndroidFunction.openDatePickerDialog(); } function callFromActivity(date) { document.getElementById('date').innerHTML = date; } My Activity : public class MainActivity extends Activity { WebView myBrowser; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myBrowser = (WebView)findViewById(R.id.mybrowser); final MyJavaScriptInterface myJavaScriptInterface = new MyJavaScriptInterface(this); myBrowser.addJavascriptInterface(myJavaScriptInterface, "AndroidFunction"); myBrowser.getSettings().setJavaScriptEnabled(true); myBrowser.loadUrl("file:///android_asset/test.html"); } public class MyJavaScriptInterface { private int mYear; private int mMonth; private int mDay; static final int DATE_DIALOG_ID = 0; Context mContext; MyJavaScriptInterface(Context c) { mContext = c; } public void openDatePickerDialog() { Calendar c = Calendar.getInstance(); mYear = c.get(Calendar.YEAR); mMonth = c.get(Calendar.MONTH); mDay = c.get(Calendar.DAY_OF_MONTH); //updateDisplay(); showDialog(DATE_DIALOG_ID); } private void updateDisplay() { String date = new StringBuilder().append(mMonth + 1).append("-") .append(mDay).append("-") .append(mYear).append(" ").toString(); Toast.makeText(getApplicationContext(), date, Toast.LENGTH_LONG).show(); myBrowser.loadUrl("javascript:callFromActivity(\""+date+"\")"); } private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { mYear = year; mMonth = monthOfYear; mDay = dayOfMonth; updateDisplay(); } }; protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: return new DatePickerDialog(MainActivity.this, mDateSetListener, mYear, mMonth, mDay); } return null; } } }
用JS动态添加iframe到页面,这个iframe网页内容加载不出来
用JS动态添加一段HTML代码到页面,且该段HTML中有内嵌iframe,现在这个iframe网页内容加载不出来. $("#divid").find("table[id=table_sdwan_branch]").last().after($("#div_sdwan_branch_show").get(0).innerHTML); 类似这样一段js,通过页面按钮触发js事件,将这部分内容拼接到页面表格中. 然后再刷新此iframe,iframe页面展现报错. 在Jsp页面写这个iframe是没问题的 <div id="div_sdwan_branch_show" name="div_sdwan_branch_show"> <table border="1" cellpadding='0' cellspacing='0' id="table_sdwan_branch"> <tr> ......... <td colspan="5"><iframe id="RLER_1" name="RLER_1" width="756" height="180" src="/GTBSS/pages/common/getRelationOrder.jsp" frameborder="0"></iframe></td> </tr>........</table> ``` ```! ![图片说明](https://img-ask.csdn.net/upload/201801/19/1516352025_513566.png) 查看js添加的无法展现的部分,报错.将页面的js都删除也还是报错. ![图片说明](https://img-ask.csdn.net/upload/201801/19/1516351884_526952.png)
ext点击grid数据加载树列表的问题
<p>页面:<br><img src="http://dl.iteye.com/upload/attachment/237037/0df4b675-841c-3bc7-86b9-83f779e7c208.bmp" alt=""></p> <p>问题:页面布局是由center和south两部分组成,center是一个grid,south是有两个tab页组成,我得操作是点击上面表哥的一条记录,下面两个tab页信息进行加载,现在问题是基本信息可以加载,但是关联行业就不能加载,(其实我的目的就是想让这行业树reload一遍),但是会出错。</p> <p> </p> <p>用firefox时错误提示:<span class="objectBox objectBox-errorMessage ">uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMHTMLDivElement.appendChild]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: http://localhost:8080/rxtc-bi-web/bip/tp/ext-3.1.0/ext-all.js :: anonymous :: line 7" data: no]</span></p> <p> </p> <p><span class="objectBox objectBox-errorMessage ">用IE8错误提示:类型不匹配,this.holder.appendChild(this.wrap)   </span></p> <p> </p> <p> </p> <p><span class="objectBox objectBox-errorMessage ">center代码:</span></p> <p><span class="objectBox objectBox-errorMessage ">  var reportIndustryQuery=new ReportIndustryQueryGrid();<br>  frQueryGrid=new Ext.grid.GridPanel({<br>   store:emStore,<br>   height:400,<br>   cm:cm,<br>   border:false,<br>   enableHdMenu : false,<br>   viewConfig:{forceFit:true},<br>   loadMask: true,<br>   selModel:new Ext.grid.CellSelectionModel(),//单元格选择<br>      sm: new Ext.grid.RowSelectionModel({<br>                singleSelect: false,<br>                listeners: {<br>                    rowselect: function(sm, row, rec) { <br>                        Ext.getCmp("frInfo").getForm().loadRecord(rec);  <br>                        reportIndustryQuery.loadTreeData(rec.get("frTradeTyp"));<br>                    }<br>                }<br>            }),<br>      tbar: getParamGridToolBar(),<br>      bbar: getPagingToolbar(emStore)<br>   <br>  });</span></p> <p> </p> <p><span class="objectBox objectBox-errorMessage ">south代码:</span></p> <p><span class="objectBox objectBox-errorMessage ">var ReportIndustryQueryGrid = function(){<br> <br> //GRID每页显示记录数<br> var pageSize = 10;<br> //当前选择的<br> var frTradeTyp;<br> <a>//@private</a><br> //列树对象<br> var tradeTree;<br> var imagePath ='../../bip/images/ext2';<br>  <br> <a>//@private</a><br> //初始化并取到行业树<br> var getTradeTree = function(){<br>   tradeTree = new Ext.tree.TreePanel({<br>     id:'reprotType_tradeTree',<br>     border:false,<br>     useArrows:true,<br>          autoScroll:true,<br>          animate:false,<br>          enableDD:false,<br>          checked: false,//显示复选框 <br>          onlyLeafCheckable: false,//所有节点可选  <br>          rootVisible: true,<br>          checkModel:'cascade',<br>          loader : new Ext.tree.DWRTreeLoader({<br>          dwrCall:frReportTradeTypeBB.getTradeTree,   <br>          baseAttrs: { uiProvider: Ext.ux.TreeCheckNodeUI  } <br>          }),<br>          root: new Ext.tree.AsyncTreeNode({<br>           text: '行业根节点',<br>           draggable:false,           <br>           id:'00000',<br>           queryParam:{},<br>           expanded:false<br>          }),<br>          tbar:[{text:'保存',handler:addTradeFun,tooltip:'保存行业',icon:imagePath+'/default/shared/save.gif',cls:'x-btn-text-icon'},<br>                {text:'刷新',handler:refreshFun,tooltip:'刷新行业',icon:imagePath+'/default/shared/save.gif',cls:'x-btn-text-icon'},<br>                '-&gt;'],<br>          listeners: {<br>      beforeload : function(node){<br>       frTradeTyp=Ext.getCmp("frTradeTyp").getValue();<br>       node.attributes.queryParam={frTradeTyp:frTradeTyp};<br> <br>     },<br>              checkchange : function(node, checked){<br>                  if(checked){<br>                      node.getUI().addClass('complete');<br>                  }else{<br>                      node.getUI().removeClass('complete');<br>                  }<br>              }<br>          }<br>   });<br> };<br> <a>//@private</a><br> //对模板树或参数树进行查找<br> var refreshFun = function(){<br>  var typeId=Ext.getCmp("frTradeTyp").getValue();<br>  tradeTree.getRootNode().reload();<br> }<br></span></p> <p><span class="objectBox objectBox-errorMessage "><br> <a>//@private</a><br> //初始化模板参数表格对象<br> var init = function(){<br>  getTradeTree();<br> }();</span></p> <p><span class="objectBox objectBox-errorMessage "> return{<br>    <a>//@public</a><br>    getTradeTree : function(){<br>   return tradeTree;<br>    }<br>    ,setFrTradeTypFun : function(selectId){     <br>   frTradeTyp=selectId;<br>   frTradeTyp=Ext.getCmp("frTradeTyp").getValue();<br>  }<br>  /**<br>   * 加载报表行业类别的行业<br>   * @param selectId 行业类型编号<br>   */<br>  ,loadTreeData: function(selectId){<br>   tradeTree.getRootNode().reload();<br>    }<br> } ;<br>};</span></p> <p> </p> <p> </p> <p>当我点击south里面的树面板上有一个按钮“刷新”可以进行重新加载,但是通过点击center上面记录调用loadTreeData方法就不能刷新,为什么?</p> <p> </p> <p> </p>
菜鸟新学Ajax,为什么加载不出PHP文档
4-1.html如下: ``` <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>使用Ajax技术载入文档</title> </head> <body> <script type="text/javascript"> function Ajax(){ //定义一个函数来异步获取信息 var xmlHttpReq; xmlHttpReq = new XMLHttpRequest(); //实例化一个XMLHttpRequest对象 if (xmlHttpReq != null){ //如果对象实例化成功 xmlHttpReq.open("get","4-1.php"); //设置异步请求的方式和请求的URL xmlHttpReq.send(null); //用send方法发送请求 xmlHttpReq.onreadystatechange = RequestCallBack;}//设置回调函数 function RequestCallBack(){ //一旦readyState值改变,将调用这个函数 if(xmlHttpReq.readyState == 4 && xmlHttpReq.status==200){ //如果浏览器处理完毕并且没有出错 document.getElementById("target").innerHTML = xmlHttpReq.responseText;}//将服务器返回的内容载入到#target元素中 }} </script> <input type="button" value="Ajax载入" onclick="Ajax();"/> <div id="target"></div> </body> </html> ``` 4-1.php代码如下: ``` <?php echo '<b>Hello Ajax!</b>'.date("Y年m月d日"); ?> ``` 点击按钮后出来的效果是 Hello Ajax!'.date("Y年m月d日"); ?> 理想效果应该是加载出具体的年月日 Hello Ajax!2015年10月25日
怎么把网页1的导航完美移植到网页2的轮播图上边的位置使导航和轮播图结合成一个网页
网页1带导航的 <!DOCTYPE html> <html> <head> <link rel="icon" href="images/favicon.ico" type="img/x-ico" /> <title>山东金泽网络科技有限公司</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="utf-8"> <meta name="keywords" content="" /> <script type="application/x-javascript"> addEventListener("load", function () { setTimeout(hideURLbar, 0); }, false); function hideURLbar() { window.scrollTo(0, 1); } </script> <link href="css/bootstrap.css" rel='stylesheet' type='text/css' /> <link rel="stylesheet" href="css/flexslider.css" type="text/css" media="screen" property="" /> <link href="css/style.css" rel='stylesheet' type='text/css' /> <link href="css/simpleLightbox.css" rel='stylesheet' type='text/css' /> <link href="css/fontawesome-all.css" rel="stylesheet"> <link href="http://fonts.googleapis.com/css?family=Poppins:100i,200,200i,300,400,400i,500,500i,600,600i,700,700i,800" rel="stylesheet"> </head> <body> <header> <div class="header_top" id="home"> <nav class="navbar navbar-toggleable-md navbar-light bg-faded"> <a class="navbar-brand" href="index.html"> <i class="fab fa-digital-ocean"></i> 金泽科技</a> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav mx-auto tp-nav text-center"> <li class="nav-item active"> <a class="nav-link" href="index.html">首页 <span class="sr-only">(current)</span> </a> </li> <li class="nav-item"> <a class="nav-link" href="about.html">关于</a> </li> <li class="nav-item"> <a class="nav-link" href="了解银豹.html">解决方案</a> </li> <li class="nav-item"> <a class="nav-link" href="blog.html">博客</a> </li> <li class="nav-item"> <a class="nav-link" href="contact.html">联系我们</a> </li> </ul> <form action="#" method="post" class="form-inline my-2 my-lg-0 search"> <input class="form-control mr-sm-2" type="search" placeholder="点击输入搜索..." name="Search" required> <button class="btn btn-outline-success my-2 my-sm-0" type="submit">搜索</button> </form> </div> </nav> </div> </header> <!--//header--> </body> </html> ``` 网页2 轮播图代码: ``` <!DOCTYPE html> <html> <head> <link rel="icon" href="images/favicon.ico" type="img/x-ico" /> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>山东金泽网络科技有限公司</title> <link rel="stylesheet" href="css/style.css" /> </head> <body> <div class="c-banner"> <div class="banner"> <ul> <li><img src="img/lunbo1.jpg"></li> <li><img src="img/lunbo2.jpg"></li> <li><img src="img/lunbo3.jpg"></li> </ul> </div> <div class="nexImg"> <img src="img/nexImg.png" /> </div> <div class="preImg"> <img src="img/preImg.png" /> </div> <div class="jumpBtn"> <ul> <li jumpImg="0"></li> <li jumpImg="1"></li> <li jumpImg="2"></li> </ul> </div> </div> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript"> //定时器返回值 var time=null; //记录当前位子 var nexImg = 0; //用于获取轮播图图片个数 var imgLength = $(".c-banner .banner ul li").length; //当时动态数据的时候使用,上面那个删除 // var imgLength =0; //设置底部第一个按钮样式 $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); //页面加载 $(document).ready(function(){ // dynamicData(); //启动定时器,设置时间为3秒一次 time =setInterval(intervalImg,3000); }); //点击上一张 $(".preImg").click(function(){ //清楚定时器 clearInterval(time); var nowImg = nexImg; nexImg = nexImg-1; console.log(nexImg); if(nexImg<0){ nexImg=imgLength-1; } //底部按钮样式设置 $(".c-banner .jumpBtn ul li").css("background-color","white"); $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nowImg).css("position","absolute"); $(".c-banner .banner ul img").eq(nexImg).css("position","relative"); //轮播淡入淡出 $(".c-banner .banner ul li").eq(nexImg).css("display","block"); $(".c-banner .banner ul li").eq(nexImg).stop().animate({"opacity":1},1000); $(".c-banner .banner ul li").eq(nowImg).stop().animate({"opacity":0},1000,function(){ $(".c-banner ul li").eq(nowImg).css("display","none"); }); //启动定时器,设置时间为3秒一次 time =setInterval(intervalImg,3000); }) //点击下一张 $(".nexImg").click(function(){ clearInterval(time); intervalImg(); time =setInterval(intervalImg,3000); }) //轮播图 function intervalImg(){ if(nexImg<imgLength-1){ nexImg++; }else{ nexImg=0; } //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nexImg-1).css("position","absolute"); $(".c-banner .banner ul img").eq(nexImg).css("position","relative"); $(".c-banner .banner ul li").eq(nexImg).css("display","block"); $(".c-banner .banner ul li").eq(nexImg).stop().animate({"opacity":1},1000); $(".c-banner .banner ul li").eq(nexImg-1).stop().animate({"opacity":0},1000,function(){ $(".c-banner .banner ul li").eq(nexImg-1).css("display","none"); }); $(".c-banner .jumpBtn ul li").css("background-color","white"); $(".c-banner .jumpBtn ul li[jumpImg="+nexImg+"]").css("background-color","black"); } //轮播图底下按钮 //动态数据加载的试用应放在请求成功后执行该代码,否则按钮无法使用 $(".c-banner .jumpBtn ul li").each(function(){ //为每个按钮定义点击事件 $(this).click(function(){ clearInterval(time); $(".c-banner .jumpBtn ul li").css("background-color","white"); jumpImg = $(this).attr("jumpImg"); if(jumpImg!=nexImg){ var after =$(".c-banner .banner ul li").eq(jumpImg); var befor =$(".c-banner .banner ul li").eq(nexImg); //将当前图片试用绝对定位,下一张图片试用相对定位 $(".c-banner .banner ul img").eq(nexImg).css("position","absolute"); $(".c-banner .banner ul img").eq(jumpImg).css("position","relative"); after.css("display","block"); after.stop().animate({"opacity":1},1000); befor.stop().animate({"opacity":0},1000,function(){ befor.css("display","none"); }); nexImg=jumpImg; } $(this).css("background-color","black"); time =setInterval(intervalImg,3000); }); }); //动态数据轮播图 //动态数据加载的时候不要直接点击demo.html运行否则可能请求不到本地json数据 // function dynamicData(){ // $.ajax({ // url:"js/test.json", // type:"get", // dataType:"json", // success:function(data){ // if(data.code==1){ // var data = data.data; // $.each(data,function(i){ // $(".c-banner .banner ul").append('<li><img src="'+this.img+'"></li>'); // $(".c-banner .jumpBtn ul").append('<li jumpImg="'+i+'"></li>') // }) // } // //获取图片总数量 // imgLength = $(".c-banner .banner ul li").length; // //为底部按钮定义单击事件 // $(".c-banner .jumpBtn ul li").each(function(){ // //为每个按钮定义点击事件 // $(this).click(function(){ // clearInterval(time); // $(".c-banner .jumpBtn ul li").css("background-color","white"); // jumpImg = $(this).attr("jumpImg"); // if(jumpImg!=nexImg){ // var after =$(".c-banner .banner ul li").eq(jumpImg); // var befor =$(".c-banner .banner ul li").eq(nexImg); // // //将当前图片试用绝对定位,下一张图片试用相对定位 // $(".c-banner .banner ul img").eq(nexImg).css("position","absolute"); // $(".c-banner .banner ul img").eq(jumpImg).css("position","relative"); // // after.css("display","block"); // after.stop().animate({"opacity":1},1000); // befor.stop().animate({"opacity":0},1000,function(){ // befor.css("display","none"); // }); // nexImg=jumpImg; // } // $(this).css("background-color","black"); // time =setInterval(intervalImg,3000); // }); // }); // } // }) // } </script> <div style="text-align:center;margin:10px 0; font:normal 14px/24px 'MicroSoft YaHei';"> </div> </body> </html> ``` ```
onload加载两个函数是出错,单击事件停不下来,怎么办?
为了填充初始页面的数据,我写了2个js函数,一个设置表单默认值,一个自动点击按钮以计算结果,但是两个函数同时放到onload后面就出错了,不知道问题出在哪里,请帮忙看看, ``` <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>无标题文档</title> <script type="text/javascript"> function setval(){ var gd = document.getElementById("gaodu").value; var kd = document.getElementById("kuandu").value; var sl = document.getElementById("shuliang").value; if(gd=="") document.getElementById("gaodu").value=1600; if(kd=="") document.getElementById("kuandu").value=600; if(sl=="") document.getElementById("shuliang").value=1; } function danji(){ document.getElementById("sub").click(); } </script> </head> <?php $gaodu=$_GET["gaodu"]; $kuandu=$_GET["kuandu"]; $shuliang=$_GET["shuliang"]; ?> <body onload="setval();danji()"> <form action=""> <input name="gaodu" id="gaodu" type="text" value="<?php echo $gaodu ?>"> <input name="kuandu" id="kuandu" type="text" value="<?php echo $kuandu ?>"> <input name="shuliang" id="shuliang" type="text" value="<?php echo $shuliang ?>"> <input name="sub" id="sub" type="submit" value="计算"> </form> <table width="200" border="1"> <tr> <td><?php echo $gaodu+$kuandu ?></td> </tr> </table> </body> </html> ```
android向webview加载的页面中填充账号密码并且自动登陆遇到问题求解
``` public static String LOGIN = "http://ui.ptlogin2.qq.com/cgi-bin/login?appid=46000101&style=8&lang=&low_login=1&hide_title_bar=1&hide_close_icon=1&daid=6&hln_css=http://mat1.gtimg.com/www/mb/images/logo244x100.png&s_url=http%3A%2F%2Fw.t.qq.com%2Ftouch"; final String tencent_url = LOGIN; try { String js = FileUtils.readAssetsFile("oauthfortencent.js", TencentWeiboActivity.this); js = js.replace("%u%", tAccount).replace("%p%", tPassword); Document dom = Jsoup.connect(LOGIN).get(); html = dom.toString(); html = html.replace("</head>", js + "</head>") .replace("action-type=\"submit\"", "action-type=\"submit\" id=\"submit\""); return html; } catch (Exception e) { e.printStackTrace(); } mWebView.loadDataWithBaseURL("http://open.qq.com/", html, "text/html", "UTF-8", ""); ``` js代码: <script type="text/javascript"> function fillAccount(){ document.getElementById("u").value = '%u%'; document.getElementById("p").value = '%p%'; document.getElementById("go").click(); } </script> 原本网页应该是这样子的 ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441727939_450508.png) 填充之后 ![图片说明](https://img-ask.csdn.net/upload/201509/09/1441728288_363319.png) 而且登录按钮不能被点击 我应该怎么弄才可以,谢谢
如何用ASHX动态生成JS
ashx代码: <%@ WebHandler Language="C#" Class="Handler" %> using System; using System.Web; public class Handler : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/javascript"; context.Response.Write("<script type='text/javascript'>function a(){alert(\"1\");}</script>"); } public bool IsReusable { get { return false; } } } ASPX代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Qx_Map_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> <link type="text/javascript" href="Handler.ashx" rel="tag" /> </head> <body> <form id="form1" runat="server"> <div> <input type="button" id="btnClick" value="按钮" onclick="a();" /> </div> </form> </body> </html> 调用a.click()调用不到? 写法有什么问题么? 我的目的是从ashx生成动态JS加载到客户端来提高性能,不用每次都要后台拼写JS在界面上。 ashx通过参数过滤权限生成不同的JS脚本。供界面调用。
TabPanel通过iframe加载页面问题
大家好!近段时间在弄EXT,我用的是EXT3.2.1的版本,单页面userDataGrid.jsp显示是没有问题的,如附件图片userDataGrid.bmp所示,userDataGrid.js的代码: <br /> <br /><pre name="code" class="java"> Ext.apply(Ext.form.VTypes, { password : function(val, field) { if (field.initialPassField) { var pwd = Ext.getCmp(field.initialPassField); return (val == pwd.getValue()); } return true; }, passwordText : 'Passwords do not match' }); var getCheckValue = function (dom){ if( !dom ) return ; return (dom.checked)?1:0; } var getCheckboxValue = function (dom){ if( !dom ) return ; return dom.checked; } Ext.onReady(function(){ Ext.BLANK_IMAGE_URL = '../resources/images/default/s.gif'; Ext.QuickTips.init(); // turn on validation errors beside the field globally Ext.form.Field.prototype.msgTarget = 'side'; //=================================================================================== // simple array store var user_data_form_store = new Ext.data.JsonStore({ fields : ['name2', 'userType'], data : [ {name2 : 'Administrator', userType: '0'}, {name2 : 'Manager', userType: '1'}, {name2 : 'Operator', userType: '2'}, {name2 : 'Stuff', userType: '3'} ] }); var combo = new Ext.form.ComboBox({ tpl: '&lt;tpl for="."&gt;&lt;div ext:qtip="{name2}. (value={userType})" class="x-combo-list-item" style="color:green"&gt;{name2}&lt;/div&gt;&lt;/tpl&gt;', store: user_data_form_store, name: 'userType', id: 'userType_id', fieldLabel: 'User Type', hiddenName:'userType', displayField: 'name2', allowBlank : false, valueField : 'userType', typeAhead: true, mode: 'local',//or use remote forceSelection: true, triggerAction: 'all', editable: false, emptyText:'Select an User Type...', selectOnFocus:true, anchor:'94%' //applyTo: 'local-states' }); var allowSms = new Ext.form.Checkbox({ name: 'allowSms', id: 'allowSms_id', fieldLabel: 'Allow Sms', anchor:'94%' }); var allowEmail = new Ext.form.Checkbox({ name: 'allowEmail', id: 'allowEmail_id', fieldLabel: 'Allow Email', anchor:'94%' }); var allowJob = new Ext.form.Checkbox({ name: 'allowJob', id: 'allowJob_id', fieldLabel: 'Allow Job', anchor:'94%' }); var allowPhone = new Ext.form.Checkbox({ name: 'allowPhone', id: 'allowPhone_id', fieldLabel: 'Allow Phone', anchor:'94%' }); var contact = new Ext.form.TextField({ fieldLabel: 'Contact', allowBlank : true, //maxLength: 20, id:'contact_id', name: 'contact', anchor:'94%' }); var createDate = new Ext.form.DateField({ allowBlank : true, editable: false, format : 'Y-m-d H:i:s', showToday : true, selectOnFocus : false, name: 'createDate', id:'createDate_id', fieldLabel: 'CreateDate', anchor:'94%' }); var address = new Ext.form.TextField({ fieldLabel: 'Address', allowBlank : true, //maxLength: 20, id:'address_id', name: 'address', anchor:'96%' }); var user_form = new Ext.FormPanel({ //labelAlign: 'top', id :'user_form_ids', labelWidth: 75, // label settings here cascade unless overridden frame:true, //title: 'Multi Column, Nested Layouts and Anchoring', bodyStyle:'padding:10px 10px 0 10px', width: 700, heigh: 1000, items: [{ layout:'column', items:[{ columnWidth:.5, layout: 'form', items: [{ xtype:'textfield', fieldLabel: 'User Name', allowBlank : false, maxLength: 20, id:'userName', name: 'userName', anchor:'94%' }, { xtype:'textfield', inputType: 'password', fieldLabel: 'Password', allowBlank : true, name: 'password', id:'password', anchor:'94%' }, { xtype:'textfield', fieldLabel: 'GSM Phone', allowBlank : true, maxLength: 20, id:'gsmPhone', name: 'gsmPhone', anchor:'94%' }, { xtype:'checkbox', name: 'allowSms2', id: 'allowSms_id', fieldLabel: 'Allow Sms', anchor:'94%' }, allowSms, allowJob, contact ] },{ columnWidth:.5, labelWidth: 105, layout: 'form', items: [ combo , { xtype:'textfield', vtype:'password', inputType: 'password', allowBlank : true, fieldLabel: 'Confirm Password', name: 'repassword', id:'repassword', initialPassField:'password', anchor:'94%' }, { xtype:'textfield', fieldLabel: 'E-mail', name: 'email', id:'email', vtype:'email', anchor:'94%' }, allowEmail, allowPhone, createDate ] }] }, address, { xtype:'htmleditor', id:'remark_id', name:'remark', fieldLabel:'Remark', height:200, anchor:'96%' },{ xtype:'hidden', fieldLabel:'Hidden Text', name:'userId', id:'userId_id', value:'null', anchor:'96%' }], buttons: [{ text: 'Load Data', anchor:'90%', handler : function(){ user_form.getForm().load({ url: '/userData.do', waitMsg: 'Loading your information...', params : {"method":"loadUserData","userId":"51"}, method : 'GET', success: function(user_form, a){ if(a.result.data.favoritie3 == "asdf"){ Ext.getCmp("favoritie3").setValue(true); } //Ext.getCmp("favoritie4").setValue(a.result.data.favoritie4 == "abc"); Ext.getCmp("repassword").setValue(Ext.getCmp("password").getValue()); Ext.Msg.alert('Success', 'Processed successfully on the server, your name is :'+a.result.data.userName); //msg('Success', 'Processed file "'+o.result.file+'" on the server'); }, failure:function(user_form, a){ Ext.Msg.alert('Failure', 'Failure...'+a.result.data.description); user_form.reset(); } }); } },{ text: 'Save', anchor:'90%', handler : function(){ if (user_form.getForm().isValid()){ user_form.getForm().submit({ url: '/userData.do', waitMsg: 'Saving your information...', params : {"method":"addUserData","allowSms":getCheckValue(Ext.getCmp("allowSms_id")), "allowEmail":getCheckValue(Ext.getCmp("allowEmail_id")),"allowJob":getCheckValue(Ext.getCmp("allowJob_id")), "allowPhone":getCheckValue(Ext.getCmp("allowPhone_id"))}, success: function(user_form, a){ Ext.Msg.alert('Success', 'Processed successfully on the server, your name is :'+a.result.result.userId); //msg('Success', 'Processed file "'+o.result.file+'" on the server'); }, failure:function(user_form, a){ Ext.Msg.alert('Failure', 'Failure...'); //user_form.reset(); } }); } //end if } },{ text: 'Reset', anchor:'90%', handler: function() { user_form.form.reset(); } }] }); //=================================================================================== // create the Grid of start // example of custom renderer function function change(val){ if(val.length &gt; 20){ return '&lt;span style="color:red;"&gt;' + val + '&lt;/span&gt;'; }else if(val.length &gt; 15){ return '&lt;span style="color:green;"&gt;' + val + '&lt;/span&gt;'; } return val; } function checkBoxRenderer(val){ if(val == 1){ return '&lt;span style="color:red;"&gt;' + true + '&lt;/span&gt;'; }else if(val == 0){ return '&lt;span style="color:green;"&gt;' + false + '&lt;/span&gt;'; } return val; } function grid_refresh(){ Ext.apply(store.baseParams, { "start":0, "limit":10, "method":"searchUserData", "userName":Ext.get('keywordText_id').getValue() }); store.load(); } // create the data store var store = new Ext.data.Store({ baseParams:{"method":"searchUserData"}, proxy: new Ext.data.HttpProxy({ url: "/userData.do" }),//new Ext.ux.data.PagingMemoryProxy(myData), autoDestroy: true, remoteSort:true, autoLoad: {params:{start:0, limit:10}}, reader: new Ext.data.JsonReader({ root: 'data', totalProperty: 'recordCount', idProperty: 'id', sortInfo: {field:'userName', direction:'ASC'}, fields: [ {name: 'userId', type: 'int'}, {name: 'userType', type: 'int'}, {name: 'userName', type: 'string'}, {name: 'password', type: 'string'}, {name: 'allowSms', type: 'int'}, {name: 'gsmPhone', type: 'string'}, {name: 'contact', type: 'string'}, {name: 'address', type: 'string'}, {name: 'email', type: 'string'}, {name: 'allowEmail', type: 'int'}, {name: 'allowJob', type: 'int'}, {name: 'allowPhone', type: 'int'}, {name: 'createDate', type: 'date', dateFormat: 'Y-m-d H:i:s'}, {name: 'remark', type: 'string'} ] }) }); var keywordText = new Ext.form.TextField({ //fieldLabel: 'keyword', id : 'keywordText_id', name: 'keyword', anchor: '95%', maxLength: 25 }); var sm = new Ext.grid.CheckboxSelectionModel({ dataIndex:"userId" }); var grid = new Ext.grid.GridPanel({ store: store, columns: [ &amp;nbsp;&amp;nbsp;&amp;nbsp;sm, &amp;nbsp;&amp;nbsp;&amp;nbsp;new Ext.grid.RowNumberer({width: 30, header:"&lt;font color='red'&gt;No.&lt;/font&gt;"}), &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {id:'userId',header: "User Id", width: 50, hidden: false, dataIndex: 'userId'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "User Type", width: 75, dataIndex: 'userType'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "userName", width: 150, renderer: change, dataIndex: 'userName'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "password", width: 120, dataIndex: 'password'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "gsmPhone", width: 120, dataIndex: 'gsmPhone'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "email", width: 125, dataIndex: 'email'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "createDate", width: 120,renderer: Ext.util.Format.dateRenderer('Y-m-d H:i:s'), dataIndex: 'createDate'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "contact", width: 200, dataIndex: 'contact'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "address", width: 200, dataIndex: 'address'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "allowSms", width: 60, renderer: checkBoxRenderer, dataIndex: 'allowSms'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "allowEmail", width: 60, dataIndex: 'allowEmail'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "allowJob", width: 60, dataIndex: 'allowJob'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "allowPhone", width: 60, dataIndex: 'allowPhone'}, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {header: "remark", width: 275, hidden:true, dataIndex: 'remark'} &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ], loadMask:true, stripeRows: true, //autoExpandColumn: 'userName_id', layout:'fit', /* height:800, width: 1200,*/ bodyStyle:'margin:0;padding:0;', //autoWidth: true, width : Ext.get('user_data_grid_div_id').getWidth(), height : Ext.get('user_data_grid_div_id').getHeight(), frame:true, title:'User Data Grid List Sliding Pager Test', plugins: new Ext.ux.PanelResizer({ minHeight: 100 }), tbar:[{ id:'add_id', text:'Add', iconCls: 'add', handler: function(){ var win = new Ext.Window({ //contentEl:"win", scripts: true, title: 'User Data', closable:true, width:720, height:480, closeAction:'hide', border:false, plain:true, layout: 'border', items: new Ext.Panel({ region: 'center', margins:'3 3 4 3', cmargins:'3 3 3 3', autoDestroy : true, defaults:{autoScroll:true}, items:[user_form] }) }); win.show(); } }, '-', { id:'remove_id', text:'Remove', iconCls: 'remove', handler: function(){ store.load({params:{start:0, limit:10,"method":"loadUserDataGrid"}}); Ext.Msg.alert('Result Tips', "Remove a record seccessfully..."); } }, '-&gt;', 'Search a UserName?: ', keywordText,{ id:'search_id', text: 'Search', pressed: false, iconCls: 'search', handler: grid_refresh },' '], bbar: new Ext.PagingToolbar({ pageSize: 10, store: store, displayInfo: true, plugins: new Ext.ux.ProgressBarPager() }) }); window.onresize = function(){ grid.setWidth(0); grid.setHeight(0); grid.setWidth(Ext.get("user_data_grid_div_id").getWidth()); grid.setHeight(Ext.get("user_data_grid_div_id").getHeight()); }; //控制缩放的时候修改grid的高度 grid.on('afterlayout',function(view,layout){ var height = grid.getSize().height - 30; },this); // create the Grid of end grid.render("user_data_grid_div_id"); store.load({params:{start:0, limit:100000,"method":"searchUserData"}}); }); </pre> <br /> <br /> <br />userDataGrid.jsp代码所示: <br /><pre name="code" class="java"> &lt;html&gt; &lt;script type="text/javascript" src="adapter/ext/ext-base.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="js/common/ext-all.js"&gt;&lt;/script&gt; 。。。其他的一些js加载省略了 &lt;body&gt; &lt;div id="user_data_grid_div_id" style="width:100%;height:100%; margin:0; padding:0" &gt;&lt;/div&gt; &lt;/body&gt; &lt;/html&gt; </pre> <br /> <br />现在我想在主框架页面(main.jsp,main.js)上动态加载其他页面(userDataGrid.jsp),如ext_main.bmp所示,我是用TabPanel里面的iframe加载的。通过iframe加载后有些功能就不能正常使用:grid分页的按钮,grid工具上的按钮和查询功能按钮都不能正常使用了,main.js: <br /><pre name="code" class="java"> Ext.onReady(function(){ Ext.state.Manager.setProvider(new Ext.state.CookieProvider()); var viewport = new Ext.Viewport({ layout: 'border', items: [ { region: 'north', contentEl: 'viewport', split: true, minSize: 124, maxSize: 124, margins: '0 0 0 0' }, { region: 'south', contentEl: 'south12', split: true, minSize: 5, maxSize: 5, title: '&amp;nbsp;', margins: '0 0 0 0' }, { region: 'east', title: 'East Side', collapsible: true, split: true, width: 225, // give east and west regions a width minSize: 175, maxSize: 400, margins: '0 5 0 0', layout: 'fit', // specify layout manager for items items: // this TabPanel is wrapped by another Panel so the title will be applied new Ext.TabPanel({ border: false, // already wrapped so don't add another border activeTab: 1, // second tab initially active tabPosition: 'bottom', items: [{ html: '&lt;p&gt;A TabPanel component can be a region.&lt;/p&gt;', title: 'A Tab', autoScroll: true }, new Ext.grid.PropertyGrid({ title: 'Property Grid', closable: true, source: { "(name)": "Properties Grid", "grouping": false, "autoFitColumns": true, "productionQuality": false, "created": new Date(Date.parse('10/15/2006')), "tested": false, "version": 0.01, "borderWidth": 1 } })] }) }, { region: 'west', id: 'west-panel', // see Ext.getCmp() below title: 'West', split: true, width: 200, minSize: 175, maxSize: 400, collapsible: true, margins: '0 0 0 5', layout: { type: 'accordion', animate: true }, items: [{ contentEl: 'west', title: 'Navigation', border: false, iconCls: 'westnavigationnavigation' // see the HEAD section for style used }, { title: 'Settings', html: '&lt;p&gt;Some settings in here.&lt;/p&gt;', border: false, iconCls: 'westnavigationsettings' }] }, // in this instance the TabPanel is not wrapped by another panel // since no title is needed, this Panel is added directly // as a Container tabs ] }); viewport.doLayout(); // get a reference to the HTML element with id "hideit" and add a click listener to it Ext.get("hideit").on('click', function(){ // get a reference to the Panel that was created with id = 'west-panel' var w = Ext.getCmp('west-panel'); // expand or collapse that Panel based on its collapsed property state w.collapsed ? w.expand() : w.collapse(); }); }); </pre> <br /> <br />动态加载的TabPanel.js代码: <br /><pre name="code" class="java"> var indexId = "new_tab_id_"; var title = ""; Ext.ux.IFrameComponent = Ext.extend(Ext.BoxComponent, { onRender : function(ct, position){ this.el = ct.createChild({tag: 'iframe', id: 'iframe-'+ this.id, frameBorder: 0, margin:0, padding:0, src: this.url}); } }); function addNewTab(str, url){ //alert(url); //indexId = indexId + str; title = document.getElementById(str).innerHTML; var obj = Ext.getCmp(indexId + str); if (!obj){ var obj = new Ext.Panel({ id:indexId + str, title: title, width:'100%', height:'100%', iconCls: 'newtab', closable: false, frame:true, layout: 'fit', items: [ new Ext.ux.IFrameComponent({ id: indexId + str, url: url }) ], listeners:{ activate:function(tab){ tab.getUpdater().refresh(); } } //html:'&lt;iframe id="'+indexId + str+'" scrolling="auto" frameborder="0" width="100%" height="100%" style="margin:0; padding:0;" src="' // +url+'"&gt;&lt;/iframe&gt;' //autoLoad: {url: url, method:'GET', params: 'foo=bar&amp;wtf=1', scripts:true} }); tabs.add(obj); //tabs.setActiveTab(obj); /* tabs.add({ id:indexId + str, title: title, closeAction:'close', iconCls: 'newtab', closable: true, layout: 'border', //html: '&lt;iframe src="'+url+'" width="100%" height="100%"/&gt;' html:'&lt;iframe id="'+indexId + str+'" frameborder="0" width="100%" height="100%" style="margin:0 0 0 0; padding:0 0 0 0;" src="' +url+'"&gt;&lt;/iframe&gt;' //autoLoad : {url:url, scripts:true} //items: obj }).show();*/ }else{ //obj.getUpdater().update(url); obj.show(); } showCurrentActiveTabs(); tabs.setActiveTab(obj); indexId = "new_tab_id_"; } function showCurrentActiveTabs(){ } var tabs = new Ext.TabPanel({ region: 'center', deferredRender: false, resizeTabs:true, activeTab: 0, minTabWidth: 135, enableTabScroll:true, activeTab: 0, margins : '3 3 3 0', plain:true, frame:true, defaults:{autoScroll: true, closable: true}, items:[{ contentEl: 'center2', title: 'API Home', closable: false, iconCls: 'newtab' }] }); tabs.on('beforedestroy', function(tab) { tabs.remove(tab,false); tab.hide(); return false; }); </pre> <br /> 现在把userDataGrid.jsp通过tabpanel加载进来后,如图:ext_main.bmp所示, 出现了2个问题: <br /> <br />1. grid工具栏上的按钮和分页按钮都不能正常使用了,点按钮:add, remove, search都没有反应; <br /> <br />2. grid怎么样可以填充满整个TabPanel? <br /> <br /> <br /> <br />请高手们多多指教,谢谢! <br /> <br />
有人知道ext怎么权限控制的吗?
小弟我初学Ext,最近用Ext开发了个小项目,但是当不同用户角色登录进去的时候某些按钮要hidden掉这个应该怎么做呢? 上网查了下都说可以用后台返回的角色来判断, 我的做法开始也是这样的,登录成功后我也获取到了后台返回的角色,但是因为现在还没有加载登录成功进入的那个界面没法获得按钮所以不能隐藏所要隐藏的按钮,代码如下: form1.getForm().submit({ url:'login.action', method : 'get', success : function(form, action) { user=action.result.username; if(user=='admin'){ Ext.get('detail').hide(); ................... win.close(); window.location = "mainview.jsp"; }, failure : function(form, action) { Ext.Msg.alert("出错啦",action.result.msg); form1.form.reset(); document.getElementById("randcodeimg").src ="../pages/img.jsp?nocache="+new Date().getTime(); } 那位大哥大姐帮我看下到底应该怎么来做啊?最好有个小例子,小弟在此先谢谢了!
在编辑文档页面使用CKEditor5中如何显示接口中获取的值
现在用vue编辑页面中需要使用CKEditor5富文本编辑器, 但是接口中获取的数据无法显示在CKEditor5中。 ``` <el-form-item> <div class="goods-editor"> <!-- 工具栏容器 --> <div id="toolbar-container"></div> <!-- 编辑器容器 --> <div id="editor"> <p v-html="articleData.content"></p> </div> </div> </el-form-item> ``` 并且初始化的时候也赋值过 ``` //初始化编辑器 CKEditor.create(document.querySelector("#editor"), { removePlugins: ["MediaEmbed"], //除去视频按钮 language: "zh-cn", // 中文 ckfinder: { uploaded: 1, url: "/" // 后端处理上传逻辑返回json数据,包括uploaded(选项true/false)和url两个字段 } }) .then(editor => { const toolbarContainer = document.querySelector("#toolbar-container"); toolbarContainer.appendChild(editor.ui.view.toolbar.element); // 加载了适配器 editor.plugins.get("FileRepository").createUploadAdapter = loader => { return new UploadAdapter(loader,editor,this); }; this.editor = editor; // 将编辑器保存起来,用来随时获取编辑器中的内容等,执行一些操作 this.editor.setData(this.articleData.content) }) .catch(error => { console.error(error); }); ``` 但无论如何都是无法显示。 ![图片说明](https://img-ask.csdn.net/upload/201904/08/1554719458_780112.png) 但是在控制台看代码的话可以看到在对应id内是有数据了 ![图片说明](https://img-ask.csdn.net/upload/201904/08/1554719528_993591.png) 希望能有大神解答
如何在js中获取ajax动态生成的元素?
我有一个php1,向php2发送ajax请求加载一个form到div里,如何获取form的输入框的值? php1: ```php <script> function querengaipan() { var jilufanhui = document.getElementById("jilufanhui").value; var str = document.getElementById("caozuo").value; var gaipanid = document.getElementById("gaipanid").value; var riqi = document.getElementById("gaipanriqi").value; var zhi = document.getElementById("gaipanzhi").value; var beizhu = document.getElementById("gaipanbeizhu").value; if (str!="gaipan") { return; } var getStr = "caozuo=gaipan&gaipanid"+ gaipanid +"&gaipanriqi="+ riqi +"&gaipanzhi="+ zhi +"&gaipanbeizhu="+ beizhu; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 xmlhttp=new XMLHttpRequest(); } else { // IE6, IE5 浏览器执行代码 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("jilufanhui").innerHTML=""; document.getElementById("jilufanhui").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","jilucontroller.php?"+getStr,true); xmlhttp.send(); } </script> <div id="jilufanhui"></div> ``` php2: ```php echo '<form onsubmit="return false" action="##"> <input type="hidden" id="caozuo" name="caozuo" value="gaipan"> <input type="hidden" name="gaipanid" value="'. $gaipanid .'"> <div class="form-group"> <label for="gaipanxingming">姓名/学号:</label> <input type="text" class="form-control" id="gaipanxingming" name="gaipanxingming" value="'. $xingming .'" placeholder="在此输入姓名或学号" disabled="disabled"> </div> ……一些其他输入框…… <center> <button type="button" class="btn btn-primary" onclick="querengaipan()">改判/删除</button> </center> </form> <br />'; ``` 点击 改判/删除按钮会提示 SCRIPT5007: Unable to get property 'value' of undefined or null reference
函数调用问题,请各位兄弟帮忙!
最近用EXTJS写的一个页面,想实现按钮级别的权限控制,所以用了动态加载的按钮,结果从后台取得的按钮可以显示出来,但是按钮的handler方法不能被执行,在IE中提示错误为“对象不支持此属性或方法”,在FF中提示错误为“this.handler.call is not a function ”下面是相关代码: <br /> <br />js函数--- <br />//新增窗口 ,工具条按钮回调函数 <br /> <span style="color: red">showAddcomp</span>=function(){ <br /> Ext.getCmp("EmpForm").form.reset(); //重置表单 <br /> //EmpForm.form.isJunk.setvalue('2'); <br /> Ext.getCmp("EmpForm").isAdd=true;&nbsp;&nbsp; //设置ISADD附加属性为真 <br /> Ext.getCmp("AddEmpWin").setTitle("新增设备信息") <br /> Ext.getCmp("AddEmpWin").show(); <br /> } <br /> <br /> //编辑窗口 <br /> showEditcomp=function(){ <br /> Ext.getCmp("EmpForm").form.reset(); //重置表单 <br /> Ext.getCmp("EmpForm").isAdd=false;&nbsp;&nbsp; //设置ISADD附加属性为假 <br /> &nbsp;&nbsp;&nbsp; var sel=Ext.getCmp("grid_1").getSelectionModel().getSelected();//取得选中的行对应的record&nbsp;&nbsp; <br /> loadForm(sel.get('Id'));//调用加载表单数据函数 <br /> Ext.getCmp("AddEmpWin").show(); <br /> Ext.getCmp("AddEmpWin").setTitle("修改设备信息") <br /> } <br /> <br /> //动态加载工具条中的按钮 <br /> SetToolButtons=function(tbr) { <br /> Ext.Ajax.request({ <br /> url: 'computer1_getButton.do', <br /> params: '', <br /> method: 'POST', <br /> success: function(response, options){ <br /> var rsp = Ext.util.JSON.decode(response.responseText); <br /> var total = rsp.totalProperty; <br /> var arrays = new Array(total); <br /> for (var i = 0; i &lt; total; i++) { <br /> arrays[i] = new Ext.Toolbar.Button({ text: rsp.result[i].text, iconCls: rsp.result[i].iconCls,<span style="color: red">handler: rsp.result[i].handler</span>,tooltip: rsp.result[i].tooltip}); <br /> alert(rsp.result[i].handler); <br /> } <br /> <br /> tbr.add(arrays); <br /> tbr.addFill();//加入一个充满工具栏的空白元素 <br /> //tbr.addSeparator();//加入工具栏分割符 <br /> tbr.doLayout(); //让工具栏更新布局,解决了在表格渲染时不显示的问题 <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; failure: function() { <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ext.Msg.alert("提示信息", "按钮加载失败,请稍后重试!"); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />&nbsp;&nbsp;&nbsp; }); <br /> <br /> }   <br /> <br /> <br />EXTJS控件区--- <br /> Ext.onReady(function(){ <br /> Ext.QuickTips.init(); <br /> Ext.form.Field.prototype.msgTarget='side';//统一指定错误信息的提示方式&nbsp;&nbsp; <br />//生成工具栏 <br /> toolbar= new Ext.Toolbar( <br />/* <br /> [{ <br />      text:'添加', <br />      tooltip:'添加一条记录', <br />      iconCls:'add', <br />     <span style="color: red"> handler:showAddcomp</span> &nbsp;&nbsp; //hidden:true, //隐藏 <br /> &nbsp;&nbsp; //disabled:true // 不可用 <br />    }, '-', { <br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id:'editButton', <br />      text:'修改', <br />      tooltip:'修改', <br />      iconCls:'option', <br />      handler:handleEdit <br />    },'-',{ <br />      text:'删除', <br />      tooltip:'删除记录', <br />      iconCls:'remove', <br />      handler:handleDelete <br />    }] <br />*/ <br /> ); <br /> <br />//执行函数为工具栏动态附加按钮 <br /> <span style="color: red">SetToolButtons(toolbar); </span> <br /> <br /> <br /> <br />奇怪在new Ext.Toolbar中定义的按钮可以执行动作,但用SetToolButtons函数动态加载的按钮就不行,是不是作用域的问题呀,帮帮我吧,兄弟们!!
Ext的TabPanel autoLoad关闭的问题
学习EXT一星期多了,做了个TabPanel,越到大难题了。 tabPanel.html里面是tabPanel,用autoLoad加载下面2个页面, tabPanelAutoLoad.html里是个formPanel, (直接加载) tabPanelAutoLoad2.html里面是个gridPanel,(点击 添加 按钮后加载) [b]问题是:当我点击添加生成个新tab后,来回切换2 与 3 tab几次,再关闭2(点击标题上的叉),3就显示2的内容!!(3应该显示grid,却变成了2的form)。希望各位帮我看看那有问题。[/b] :cry: tabPanel.html (TabPanel) [code="java"] <script type="text/javascript" language="javascript"> Ext.onReady(function(){ var tab = new Ext.TabPanel({ id:'mypanel', height:300, width:500, deferredRender:false, autoDestroy:false, animScroll:true, resizeTabs:true, minTabWidth:100, enableTabScroll:true, items:[ {id:"panel0",title:"测试 1",layout:'fit',html:'Tab'}, {id:"panel1",title:"formTab",closeAction:'hide',closable:true,layout:'fit', autoLoad:{ url:'tabPanelAutoLoad.html', method:'POST', params:'bane=jia', scripts:true } }], renderTo:'mytab' }); tab.setActiveTab(0); // 增加一个tab Ext.get('btn1').on('click',function(){ if(Ext.getCmp("panel2")){ // 如果此tab已经存在(hide也是已经存在) tab.add('panel2'); tab.setActiveTab('panel2'); alert('执行if, 不重新创建'); } else { // 此tab不存在就重新创建 alert('执行else, 重新创建'); var newTab = tab.add({ id:'panel2', title:'gridTab', layout:'fit', closable:true, closeAction:'hide', autoLoad:{ url:'tabPanelAutoLoad2.html', method:'POST', params:'foo=bar&wtf=1', scripts:true } }); tab.setActiveTab(newTab); } }); }) </script> </head> <body> <div id="test"><input type="button" id="btn1" value=" 添 加 "></div> <div id='mytab'></div> </body>[/code] tabPanelAutoLoad.html (FormPanel) [code="java"]<script type="text/javascript" language="javascript"> Ext.onReady(function(){ var form = new Ext.form.FormPanel({ defaultType:"textfield", title:"表单", labelAlign:"right", labelWidth:50, buttonAlign:'center', frame:true, url:"form.jsp", items:[{ fieldLabel:"姓名", name:"name", width:200, emptyText:"请填写姓名", // 初始值(获得焦点就会为空) allowBlank:false, // 不允许为空 regex: /^[\u4E00-\u9FA5]+$/, // 只能是汉字 regexText: '只能输入汉字' // 只能是汉字 的错误提示(为空自动提示) }], buttons:[{ text:"提 交", handler:function(){ form.getForm().submit({ waitMsg:'请等待...', waitTitle:'提示', success:function(form, action){ Ext.Msg.alert("提示",action.result.msg); }, failure:function(form, action){ // 这里检验的是 姓名,见form.jsp if (action.failureType == Ext.form.Action.SERVER_INVALID) { Ext.Msg.alert('错误', '后台校验失败'); } else { Ext.Msg.alert('错误', '提交失败,请检查表单内容'); } } }); } }] }); form.render('myform'); }); </script> </head> <body> <div id="myform"></div> </body>[/code] tabPanelAutoLoad2.html (GridPanel) [code="java"] <script type="text/javascript" language="javascript"> Ext.onReady(function() { var cm = new Ext.grid.ColumnModel([{ header : "id", dataIndex : "id" }, { header : "姓名", dataIndex : "name" }, { header : "email", dataIndex : "email" }, { header : "性别", dataIndex : "sex" }, { header : "年龄", dataIndex : "age" }]); var store = new Ext.data.SimpleStore({ fields : ["id", "name", "email", "sex", "age"], data : [["1", "jia", "jia5286@163.com", "1", "20"], ["2", "jia", "jia5286@163.com", "1", "20"], ["3", "jia", "jia5286@163.com", "1", "20"], ["4", "jia", "jia5286@163.com", "1", "20"], ["5", "jia", "jia5286@163.com", "1", "20"]] }); var grid = new Ext.grid.GridPanel({ cm:cm, store:store, title:"Grid测试", height:300, width:600, loadMask:true }); grid.render('mygrid'); }) </script> </head> <body> <div id="mygrid"></div> </body>[/code]
请问怎么在SSM框架里使用bootstrap-table
我用的时候提示我类型错误了,但我不知道怎么改,请大神伸出援手,下面是我的代码 js代码: ``` function dic_table(){ var row=1; //alert("gggg"); $('#dic_table').bootstrapTable('destroy'); $('#dic_table').bootstrapTable({ url:'dicTable.do', method:'get', toolbar:'#formTools',//工具按钮用那个 striped:true, cache:false, pagination:true, queryParams : function(params) { return { dicName: $('#dicName').val(), offset : params.offset, limit : params.limit }; }, pageSize : 5, //每页的记录行数(*) pageNumber : 1, //初始化加载第一页,默认第一 responseHandler:function (res) { return res.DATA; }, pageList : [ 2, 4, 6 ], singleSelect : true, showColumns : true, sortable : true, //是否启用排序 sidePagination : "client", //分页方式:client客户端分页,server服务端分页(*) strictSearch : true, minimumCountColumns : 2, //最少允许的列数 clickToSelect : true, //是否启用点击选中行 showRefresh : false, //是否显示刷新按钮 uniqueId : 'tName', //每一行的唯一标识,一般为主键列 cardView : false, //是否显示详细视图 search : true, strictSearch : true, showColumns : true, showRefresh : true, showExport : true, onLoadError : function(data) { alert(data); $('#dic_table').bootstrapTable( 'removeAll');}, onLoadSuccess:function(data){ alert("成功"+data); }, columns:[ {field:'tDicId',title:'数据编号'}, {field:'tName',title:'数据名称'}, {field:'tType',title:'数据类型'}, {title:'操作',align:'center', formatter:function(value,row,index){ //var e="<a href='javascript:void(0);media='"row.tName"';title='"row.tName"'; id='"row.tName"'>编辑</a>"; //var f="<a href='javascript:void(0);media='"row.tName"'; title='"row.tName"'; id='del'>删除</a>"; var e="<a href='javascript:void(0);'>编辑</a>"; var f="<a href='javascript:void(0);'>删除</a>"; return e+f; }}], onClickRow:function(row,$element){ alert(row.id); } }); } ``` 后台代码 controller: ``` @Controller public class DicCodeController { public DicCodeController() { // TODO Auto-generated constructor stub } @Autowired IDicCodeService dicCodeServiceImpl; @RequestMapping(value="dicTable.do",method=RequestMethod.GET) @ResponseBody public void SelectDicConde(TbDicCode tDicCode, HttpServletRequest request,HttpServletResponse response) throws IOException{ //PrintWriter pw=response.getWriter(); //获取客户端传递来的也码和每页记录数,并转化为int类型 //int pageSize=Integer.parseInt(request.getParameter("pageSize")); //int pageNumber=Integer.parseInt(request.getParameter("pageNumber")); // String orderNum=request.getParameter("orderNum"); response.setCharacterEncoding("gbk"); request.setCharacterEncoding("utf-8"); System.out.println("good"); String dicName=null; if (request.getParameter("dicName")!=null) { dicName=request.getParameter("dicName"); } String pageSizeStr=request.getParameter("limit"); String pageOffsetStr=request.getParameter("offset"); int pageSize= pageSizeStr==null ? 10: Integer.parseInt(pageSizeStr); int pageOffset= pageOffsetStr==null ? 10: Integer.parseInt(pageOffsetStr); /* if (pageOffset==0) { pageOffset=1; }*/ System.out.println("分页信息: "+pageOffset+","+pageSize); //List list= dicCodeServiceImpl.selectDic(dicName,pageOffset,pageSize); Map<String ,Object> map=dicCodeServiceImpl.selectDic2(dicName,pageOffset,pageSize); //分页查找商品的销售记录 // JSON.toJSONString(list); response.getWriter().write(JSON.toJSONString(map)); System.out.println("jieguo:"+map.get("pageSize")+map.get("data")); // return map; } } ``` service: ``` @Service public class DicCodeServiceImpl implements IDicCodeService { @Autowired TbDicCodeMapper TbDicCodeMapper; @Override public Map<String,Object> selectDic2(String dicName,int pageOffset,int pageSize) { TbDicCode tbCode=new TbDicCode(); // TODO Auto-generated method stub tbCode.settName(dicName); tbCode.setPageOffset(pageOffset); tbCode.setPageSize(pageSize); List<TbDicCode> list= TbDicCodeMapper.selectDic(tbCode); Map<String,Object> result=new HashMap<>(); /* list.add("pageOffset",pageOffset); list.add("pageSize", pageSize);*/ System.out.println("数据字典:/t数据字典代码/t数据字典id/t数据字典名称/t数据字典类型"); for (TbDicCode tbDicCode : list) { System.out.println("数据字典:"+tbDicCode.gettDicCode()+","+ tbDicCode.gettDicId()+","+tbDicCode.gettName()+","+tbDicCode.gettType() ); } int total=TbDicCodeMapper.DicCount(dicName); result.put("data",list);//list集合 result.put("offset",pageOffset); result.put("limit", pageSize); result.put("total", total); System.out.println("result:"+result.toString()); return result; } } ``` 运行的结果: ![图片说明](https://img-ask.csdn.net/upload/201711/04/1509771777_234161.png) 点击“data is undefined”后有值: {"total":2,"data":[{"pageOffset":0,"pageSize":0,"tDicCode":"","tDicId":"1","tName":"数据1","tType":"类型1"},{"pageOffset":0,"pageSize":0,"tDicCode":"","tDicId":"2","tName":"数据2","tType":"类型2"}],"offset":0,"limit":5} 请问要怎么改才能让bootstrap-table正常运行?
有没有大神能指点一下哪里错了。。。。
package Frame; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.*; import javax.swing.*; import db.DButil; public class login extends JFrame implements ActionListener{ private JPanel jp=new JPanel(); //创建标签数组 private JLabel[] jlArray={new JLabel("用户名"), new JLabel("密 码"),new JLabel("")}; private JButton jb1; private JButton jb2; private JButton jb3; private JTextField jtf=new JTextField(); private JPasswordField jpf=new JPasswordField(); //布局构造实现方法 public login(){ Icon icon1=new ImageIcon("login.jpg"); Icon icon2=new ImageIcon("reset.jpg"); Icon icon3=new ImageIcon("zhuce.jpg"); JPanel jp=new JPanel(){ protected void paintComponent(Graphics g) { ImageIcon icon = new ImageIcon("bg.jpg"); Image img = icon.getImage(); g.drawImage(img, 0, 0, icon.getIconWidth(), icon.getIconHeight(), icon.getImageObserver()); }}; jp.setLayout(null); jb1=new JButton(icon1); jb2=new JButton(icon3); jb3=new JButton(icon2); jlArray[0].setBounds(70,120,90,32); jb1.setBounds(365,110,130,60); jb2.setBounds(365,170,130,60); jlArray[1].setBounds(70,170,90,32); //将标签与按钮添加到JPanel容器中 jp.add(jlArray[0]); jp.add(jlArray[1]); jp.add(jb1); jp.add(jb2); jb1.addActionListener(this); jb2.addActionListener(this);//为按钮注册动作事件监听器 //添加修改密码的按钮 jb3.setBounds(365,230,130,60); jp.add(jb3); jp.add(jtf); jtf.setBounds(140,120,180,30);//设置文本框位置 jp.add(jpf); jpf.setBounds(140,170,180,30);//设置密码框位置 jpf.setEchoChar('*'); //密码显示字符形式 jpf.addActionListener(this); //为密码框注册动作事件监听器 this.setVisible(true);//设置窗体的可见性 jpf.addActionListener(this); //为密码框注册动作事件监听器 //设置用于显示登陆状态的标签大小位置,并将其添加进JPanel容器 jlArray[2].setBounds(70,220,300,30); jp.add(jlArray[2]); this.setTitle("登陆");//设置窗体标题 this.setBounds(450,200,500,318);//设置窗体的大小 this.setResizable(false);//设置窗体不让用户调整大小 this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); this.setVisible(true);//设置窗体的可见性 this.add(jp);//将窗体添加到面板中 jp.setBackground(Color.blue); } public static void main(String[] args) { new login();//创建登陆窗体 } public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub //得到用户名与密码 String user=jtf.getText().trim(); String pwd=String.valueOf(jpf.getPassword());//返回密码的字符串表示方式 String sql=""; if(e.getSource()==jtf){//事件源为文本框,切换焦点到密码框 jpf.requestFocus(); } else if(e.getSource()==jb1||e.getSource()==jpf){ //判断用户名和密码是否匹配 查询数据库 if(DButil.check(user, pwd)){ //登陆成功 MainFrame mf=new MainFrame(jtf.getText());//主窗体 this.dispose(); } else{ //登陆失败 jlArray[2].setText("对不起,非法的用户名和密码"); this.clear(); } } else if(e.getSource()==jb2) {//事件源为注册按钮 if(user.equals("")||pwd.equals("")) {//如果注册的用户名为空或者密码为空 jlArray[2].setText("用户名和密码都不得为空!!!"); this.clear();//清空输入文本框 } else { sql="select uid from user where uid='"+user+"'"; if(DButil.isExist(sql)) {//用户名已经存在 jlArray[2].setText("对不起,用户名已存在!!!"); this.clear();//清空输入文本框 } else { sql="insert into user values('"+user+"','"+pwd+"')"; if(DButil.update(sql)>0) {//注册成功 jlArray[2].setText("恭喜您!!!注册成功,请登陆"); } } } } else if(e.getSource()==jb3)//修改密码的监听 { //判断是否已经输入用户名和密码 if(user.equals("")||pwd.equals("")) { jlArray[2].setText("修改密码先输入正确的用户名和密码!!!"); this.clear();//清空输入文本框 } //判断是否输入了正确的用户名和密码 else if(DButil.check(user,pwd)) { //正确的用户名和密码 String password=JOptionPane.showInputDialog(this,"修改密码:","请输入新密码", JOptionPane.PLAIN_MESSAGE); //得到新的密码为空 if(password==null||password.equals("")) { JOptionPane.showMessageDialog(this,"密码不得为空!!!","错误", JOptionPane.WARNING_MESSAGE); } else {//密码不为空 sql="update user set pwd='"+password+"' where uid='"+user+"'";//更新密码的SQL if(DButil.update(sql)>0) {//密码修改成功 this.clear();//清空输入文本框 jlArray[2].setText("恭喜您!!!密码修改成功,请用新密码登陆"); } } } else { JOptionPane.showMessageDialog(this,"用户名或者密码错误!!!","错误", JOptionPane.WARNING_MESSAGE); this.clear();//清空输入文本框 } } } package Frame; import javax.swing.*; import javax.swing.table.DefaultTableModel; import db.DButil; import java.awt.*; import java.awt.event.*; import java.sql.*; import java.io.*; import java.util.*; public class MainFrame extends JFrame implements ActionListener,ItemListener { private String uname=null;//当前用户的名字 private boolean isInsert=false;//是否为添加默认为否 private JPanel topjp=new JPanel();//界面上半部分的JPanel容器 private JButton jba=new JButton("模糊查询"); private JButton jbs=new JButton("查找"); private JTextField jtfs=new JTextField();//按给出信息查找联系人信息 private JRadioButton jrbxm=new JRadioButton("按姓名查找",true); private JRadioButton jrbbh=new JRadioButton("按学号查找",false); private ButtonGroup bg=new ButtonGroup();//单选按钮组 private JPanel jpbr=new JPanel();//单选按钮面板 private JPanel jpyInfo=new JPanel();//右侧显示个人信息的面板 private JTextArea jta=new JTextArea(); // 模糊查询得到的信息文本区 private JLabel[] jlInfo={new JLabel("学号:"),new JLabel("姓名:"), new JLabel("性别:"),new JLabel("出生日期:"), new JLabel("电话号码:"),new JLabel("QQ:"), new JLabel("Email:"),new JLabel("地址:"), new JLabel("添加相片")}; private JButton[] jbInfo={new JButton("编辑"),new JButton("保存"), new JButton("浏览"), new JButton("上传"),}; private JLabel jlPhoto=new JLabel();//显示图像的JLabel控件 private JTextField[] jtfInfo=new JTextField[10]; private JTextField jtfPhoto=new JTextField();//添加照片到相册的路径 private JFileChooser jfcPic=new JFileChooser();//上传图像的文件选择器 private DefaultTableModel tableModel; private JTable table; //性别部分 private JRadioButton jrbMale=new JRadioButton("男",true); private JRadioButton jrbFemale=new JRadioButton("女"); private ButtonGroup bgGender=new ButtonGroup(); private JPanel jpGender=new JPanel();//单选按钮面板 private JLabel jlDetail=new JLabel();//右侧显示一幅图片的标签 private JSplitPane jspOuter=//上下分割的JSplitPane new JSplitPane(JSplitPane.VERTICAL_SPLIT,true); //系统托盘部分 private PopupMenu popup=new PopupMenu(); private SystemTray tray;//定义SystemTray成员变量 private TrayIcon trayIcon;//定义TrayIcon成员变量 private MenuItem exit=new MenuItem("退出程序");//定义菜单 public void initJps() {//界面上半部分的初始化 topjp.setLayout(null);//设置topjp布局管理器为null //设置按钮大小并添加到JPanel面板里 jba.setBounds(5,10,120,26); jba.addActionListener(this);//为模糊查询按钮注册事件监听器 topjp.add(jba); jbs.setBounds(130,10,80,26); jbs.addActionListener(this);//为查找按钮注册事件监听器 topjp.add(jbs);//添加按钮到topjp面板里 //设置jtfs文本框大小并添加到jps面板里 jtfs.setBounds(215,10,120,26); jtfs.addActionListener(this);//为文本框注册事件监听器 topjp.add(jtfs); //设置单选按钮大小和位置并添加到jpbr面板里同时添加到bg单选按钮组里 jrbxm.setBounds(5,3,50,26); jrbxm.addItemListener(this);//为单选按钮注册ItemEvent事件监听器 bg.add(jrbxm); jpbr.add(jrbxm); jrbbh.setBounds(60,3,50,26); jrbbh.addItemListener(this); bg.add(jrbbh); jpbr.add(jrbbh); jpbr.setBounds(360,10,200,26); topjp.add(jpbr); } public void initInfo() {//初始化信息界面 jpyInfo.setLayout(null);//设置布局管理器为空 jpyInfo.setBounds(50,50,380,360);//设置信息面板的大小和位置 jlPhoto.setBounds(220,10,150,170);//设置联系人图像JLabel的大小和位置 jlPhoto.setBorder(BorderFactory.createLineBorder(Color.BLACK));//将JLbel的边框线显现出来 jpyInfo.add(jlPhoto);//将显示联系人照片的JLabel添加到信息面板 tableModel=new DefaultTableModel(); Vector vector1 = new Vector(); DButil db = new DButil(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); tableModel.setDataVector(null, vector1); System.out.print(123); table=new JTable(tableModel); //table.addMouseListener((MouseListener) this); table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane js=new JScrollPane(table); //添加相片部分的控件 jtfPhoto.setBounds(80,250,200,26);//设置得到照片路径的文本框的大小和位置 jpyInfo.add(jtfPhoto);//将得到照片路径的文本框添加到信息面板 jbInfo[2].setBounds(285,250,80,26); jbInfo[2].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[2]); //上传按钮 jbInfo[3].setBounds(380,250,80,26); jbInfo[3].addActionListener(this);//为添加照片的浏览按钮注册事件监听器 jpyInfo.add(jbInfo[3]); for(int i=0;i<9;i++)//添加JLabel,并设置大小和位置 { jlInfo[i].setBounds(20,10+i*30,60,26); jpyInfo.add(jlInfo[i]); } for(int i=0;i<10;i++) {//初始化一些文本框 jtfInfo[i]=new JTextField(); } //学号 jtfInfo[0].setBounds(80,10,135,26); jpyInfo.add(jtfInfo[0]); //姓名 jtfInfo[1].setBounds(80,40,135,26); jpyInfo.add(jtfInfo[1]); //出生日期 jtfInfo[3].setBounds(80,100,135,26); jpyInfo.add(jtfInfo[3]); //电话号码 jtfInfo[4].setBounds(80,130,135,26); jpyInfo.add(jtfInfo[4]); //QQ jtfInfo[5].setBounds(80,160,135,26); jpyInfo.add(jtfInfo[5]); //Email jtfInfo[6].setBounds(80,190,135,26); jpyInfo.add(jtfInfo[6]); //地址文本框的添加 jtfInfo[7].setBounds(80,220,285,26); jpyInfo.add(jtfInfo[7]); //模糊查询信息文本区的添加 js.setBounds(0,350,600,100); jpyInfo.add(js); //编辑、保存按钮 jbInfo[0].setBounds(160,300,80,26); jbInfo[0].addActionListener(this); jpyInfo.add(jbInfo[0]); jbInfo[1].setBounds(260,300,80,26); jbInfo[1].addActionListener(this); jpyInfo.add(jbInfo[1]); //性别部分 jrbMale.setBounds(5,3,50,26); jrbMale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbMale); jpGender.add(jrbMale); jrbFemale.setBounds(60,3,50,26); jrbFemale.addItemListener(this); //为单选按钮注册ItemEvent事件监听器 bgGender.add(jrbFemale); jpGender.add(jrbFemale); jpGender.setBounds(60,70,125,26); jpyInfo.add(jpGender); } public void clearInfo()//清空信息面板 { for(int i=0;i<10;i++) { jtfInfo[i].setText("");//清空文本框 } jlPhoto.setIcon(null);//清空图像 } public void setjtaArea(String information){ if(information.isEmpty()){ JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { jta.setText(information); } } public void setInfo(Vector<String> pInfo)//将信息向量设置到信息面板中 {//将信息向量按规则填到信息面板里 this.clearInfo(); if(pInfo.size()==0) { JOptionPane.showMessageDialog(this,"所查用户不存在!!!","错误", JOptionPane.WARNING_MESSAGE); } else { for(int i=0;i<2;i++) {//显示联系人编号和姓名 jtfInfo[i].setText(pInfo.get(i)); } if(pInfo.get(2).equals("男")) {//显示性别 jrbMale.setSelected(true); } else {//显示性别 jrbFemale.setSelected(true); } for(int i=3;i<9;i++) {//显示出生日期、电话号码和QQ jtfInfo[i].setText(pInfo.get(i)); } } } public Vector<String> getInfo()//从信息面板得到用户输入的信息 { Vector<String> pInfo=new Vector<String>(); pInfo.add(jtfInfo[0].getText().trim());//添加pid pInfo.add(jtfInfo[1].getText().trim());//添加pname String gender=jrbMale.isSelected()?"男":"女"; pInfo.add(gender);//添加性别 pInfo.add(jtfInfo[3].getText().trim());//出生日期 pInfo.add(jtfInfo[4].getText().trim());//电话号码 pInfo.add(jtfInfo[5].getText().trim());//QQ pInfo.add(jtfInfo[6].getText().trim());//Email pInfo.add(jtfInfo[7].getText().trim());//地址 String photoPath=jtfPhoto.getText().trim();//得到照片路径 pInfo.add(photoPath);//照片路径 return pInfo; } public void monitorSaveButton() //监听保存按钮的方法 { String sql=""; String pid=jtfInfo[0].getText().trim();//得到联系人的编号 String pname=jtfInfo[1].getText().trim();//得到联系人的姓名 String gender=jrbMale.isSelected()?"男":"女"; String s1=jtfInfo[3].getText().trim(); String s2=jtfInfo[4].getText().trim(); String s3=jtfInfo[5].getText().trim(); String s4=jtfInfo[6].getText().trim(); String s5=jtfInfo[7].getText().trim(); String s6=jtfPhoto.getText().trim(); String sqla="select * from contacts where pid='"+pid+"'";//判断此编号是否存在的SQL String sqlb="select * from contacts where pname='"+pname+"'";//判断此姓名是否存在的SQL boolean isIdExist=DButil.isExist(sqla);//得到编号是否存在 boolean isNameExist=DButil.isExist(sqlb);//得到姓名是否存在 if(!(pid.equals(" ")||pname.equals(" "))) { if(isIdExist||isNameExist){ JOptionPane.showMessageDialog(this,"联系人已存在"+ " , 添加联系人失败","错误",JOptionPane.WARNING_MESSAGE); } else { sql="insert into contacts values (?,?,?,?,?,?,?,?,?,?)"; String[] paras={pid,pname,gender,s1,s2,s3,s4,s5,s6,null}; if(DButil.update(sql,paras)>0){ JOptionPane.showMessageDialog(this,"联系人保存成功","提示", JOptionPane.INFORMATION_MESSAGE); } } } } public void setEditable(boolean Editable)//设置信息窗口是否可编辑 { jrbFemale.setEnabled(Editable);//设置性别是否可编辑 jrbMale.setEnabled(Editable);//设置性别是否可编辑 for(int i=0;i<8;i++) { jtfInfo[i].setEditable(Editable);//设置文本框是否可编辑 } } public void monitorSearchButton()//监听查找按钮的方法 { String name=jtfs.getText().trim(); String sql="";//声明查找字符串 if(name.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else { if(jrbxm.isSelected()==true) {//按姓名查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pname='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } else {//按编号查找 sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where pid='"+name+"'"; this.setInfo(DButil.getPerInfo(sql));//设置信息面板为该联系人的信息 } } this.setEditable(false);//设置面板不可编辑 } public void monitorRandomSearchButton(String information){ //监听模糊查询按钮 String adress=jba.getText().trim(); String sql="";//声明查找字符串 if(adress.equals("")) { JOptionPane.showMessageDialog(this,"查找条件不能为空!!!", "错误", JOptionPane.WARNING_MESSAGE); } else{ sql="select pid,pname,pgender,pbirthday,pnumber,pQQ,pemail,padress,pphoto from contacts where padress like '%天河区%'"; } } public MainFrame(String uname) { //主窗体构造器 this.uname=uname;//设置用户名 this.initJps();//界面上半部分的搭建 this.initInfo(); jspOuter.setDividerLocation(46);//设置分割窗体JSplitPane的位置 jspOuter.setTopComponent(topjp);//设置窗体上半部分的控件 jspOuter.setBottomComponent(jpyInfo);//设置下半部分的控件 //设置窗体关闭按钮执行的动作 this.add(jspOuter); this.addWindowListener( new WindowAdapter() { @SuppressWarnings("deprecation") public void WindowClosing(WindowEvent e) { //将窗体隐藏 MainFrame.this.hide(); } } ); //设置主窗体的图标、标题、大小以及可见性 this.setResizable(false);//设置窗体不让调整大小 this.setTitle(uname+"的通讯录"); this.setBounds(420,80,618,550); this.setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getSource()==jbInfo[1]) {//保存按钮的监听 this.monitorSaveButton(); } else if(e.getSource()==jba) {//模糊查询按钮的监听 DButil db = new DButil(); Vector vector1 = new Vector(); vector1.add("学号"); vector1.add("姓名"); vector1.add("性别"); vector1.add("出生日期"); vector1.add("电话号码"); vector1.add("QQ"); vector1.add("Email"); vector1.add("地址"); vector1.add("照片路径"); String ad = jtfs.getText().trim(); tableModel.setDataVector(db.getData(ad),vector1); } else if(e.getSource()==jbInfo[2]) {//打开图像文件路径 jfcPic.showOpenDialog(this); if(jfcPic.getSelectedFile()!=null) { jtfPhoto.setText(""+jfcPic.getSelectedFile()); } } else if(e.getSource()==jbInfo[0]) {//编辑按钮的监听 this.setEditable(true);//设置信息面板可编辑 } else if(e.getSource()==jbs||e.getSource()==jtfs) {//查找,按按钮或者在文本框里敲回车 this.monitorSearchButton(); } } public void itemStateChanged(ItemEvent e) { } public static void main(String[] args){ } } package db; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.Vector; public class DButil { private static String jdbcName="org.gjt.mm.mysql.Driver";//声明驱动类字符串 //声明数据库连接字符串 private static String dbUrl="jdbc:mysql://127.0.0.1:3306/maillist"; private static String dbUserName="root"; private static String dbPassword="admin"; private static Connection con=null;//声明数据库连接对象引用 private static Statement stat=null;//声明语句对象引用 private static PreparedStatement pstmt=null; private static ResultSet rs=null;//声明结果集对象引用 private static PreparedStatement psInsert=null;//声明预编译语句对象引用 public static Connection getConnection()//得到数据库连接的方法 { System.out.println("连接中.."); try { Class.forName(jdbcName);//加载驱动类 con=DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//得到连接 System.out.println("成功连接"); } catch(Exception e){e.printStackTrace();} return con;//返回连接 } public static boolean check(String user,String pwd)//登陆验证 { boolean flag=false; try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery("select pwd from user where uid='"+user+"'"); rs.next(); String spwd=rs.getString(1);//得到密码 if(spwd.equals(pwd)) { flag=true;//密码匹配,登陆成功 } } catch(Exception e) { flag=false;//有任何异常发生,登陆失败 } finally{DButil.closeCon();}//关闭数据库连接 return flag; } //某条记录是否存在 public static boolean isExist(String sql) { boolean flag=false;//设置返回值 try { con=DButil.getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 if(rs.next()) { flag=true;//存在,设置返回值为true } } catch(Exception e) { e.printStackTrace(); flag=false;//发生任何异常,置返回结果为false } finally{DButil.closeCon();}//关闭数据库连接 return flag;//返回结果 } public static int update(String sql,String[] paras)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); pstmt=con.prepareStatement(sql); for(int i=0; i<paras.length;i++){ pstmt.setString(i+1, paras[i]); } count=pstmt.executeUpdate(); } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } public static int update(String sql)//更新数据库 { int count=0;//声明返回值 try { con=DButil.getConnection(); stat=con.createStatement(); count=stat.executeUpdate(sql);//执行更新 } catch(Exception e) { e.printStackTrace(); count=-1;//更新失败返回值为-1 } finally{DButil.closeCon();}//关闭数据库连接 return count;//返回结果 } //====================添加联系人================================= public static String insertPerson(String uid,Vector<String> pInfo) { String isPathNull="isNotNull";//传过来的图像是不是合法,默认不为空 try{ con=getConnection();//得到数据库连接 if(pInfo.get(8).equals("")||pInfo.get(8)==null) {//照片路径为空,则不插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,uid)"+ "values(?,?,?,?,?,?,?,?,?)"); } else {//照片路径不为空,则插入图像 psInsert=con.prepareStatement("insert into contacts(pid,pname,pgender,pbirthday,pnumber,"+ "pQQ,pemail,padress,pphoto,uid)"+ "values(?,?,?,?,?,?,?,?,?,?,?)" ); File f=new File(pInfo.get(8));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(11,b);//设置pphoto参数的数据 } for(int i=0;i<8;i++) {//设置公共信息 psInsert.setString(i+1,pInfo.get(i)); } psInsert.setString(10,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//图片路径不对 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭数据库连接 return isPathNull; } public static String updatePerson(String uid,Vector<String> pInfo){ String isPathNull="isNotNull";//传过来的path是不是合法 try{ con=getConnection(); if(pInfo.get(9).equals("")||pInfo.get(9)==null) {//更新时候,如果照片路径为空,则不更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,birthday=?,pnumber=?,"+ "pQQ=?,pemail=?,padress=?,pphoto=?,uid=? where pid='"+pInfo.get(0).trim()+"'"); } else {//如果照片路径不为空,则更新图像 psInsert=con.prepareStatement("update contacts set pname=?,pgender=?,page=?,pnumber=?,"+ "pemail=?,pgroup=?,ppostalcode=?,padress=?,uid=?,pphoto=? where pid='"+pInfo.get(0).trim()+"'"); File f=new File(pInfo.get(9));//获取选取的图片文件 byte[] b=new byte[(int)f.length()];//创建存储图片数据的数组 FileInputStream fin=new FileInputStream(f); fin.read(b);fin.close();//读取文件存于byte数组中并关闭输入流 psInsert.setBytes(10,b); } for(int i=1;i<8;i++){//设置公共的信息部分 psInsert.setString(i,pInfo.get(i)); } psInsert.setString(9,uid);//所属用户 psInsert.execute();psInsert.close();//执行更新并关闭语句 } catch(FileNotFoundException fnfe){isPathNull="isNull";}//路径不合法 catch(Exception e){e.printStackTrace();} finally{DButil.closeCon();}//关闭连接 return isPathNull; } public Vector getData(String ad){ Vector vector=new Vector(); try { //陈述对象 con=getConnection();//得到数据库连接 stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);//创建语句对象 rs=stat.executeQuery("select * from contacts where padress LIKE '%"+ad+"%'"); ResultSetMetaData rm=rs.getMetaData(); //循环打印出数据库表中数据 int n=rm.getColumnCount(); while(rs.next()){ Vector ve=new Vector(); for(int i=1;i<n+1;i++){ String s=rs.getString(i); ve.add(s); } vector.add(ve);//Vector对象接收表中数据 } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{if(rs!=null){ try { rs.close();//关闭结果集 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(stat!=null){ try { stat.close();//关闭陈述对象 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(con!=null){ try { con.close();//关闭连接 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return vector; } public static Vector<String> getPerInfo(String sql)//得到联系人信息 { Vector<String> pInfo=new Vector<String>(); try { con=getConnection();//得到数据库连接 stat=con.createStatement();//创建语句对象 rs=stat.executeQuery(sql);//执行查询 while(rs.next()) { for(int i=1;i<10;i++) { System.out.println(rs.getString(i)); pInfo.add(rs.getString(i));//将联系人信息添加到返回向量 } } } catch(Exception e) { e.printStackTrace(); } finally{DButil.closeCon();}//关闭数据库连接 return pInfo;//返回信息集合 } public static void closeCon()//关闭数据库连接的方法 { try { if(rs!=null){rs.close(); rs=null;}//如果结果集不为空关闭结果集并赋值null if(stat!=null){stat.close(); stat=null;}//如果语句对象不为空关闭语句对象并赋值null if(con!=null){con.close(); con=null;}//如果连接不为空关闭连接并赋值null } catch(Exception e){e.printStackTrace();} } public static void main(String[] args){ DButil DB=new DButil(); System.out.println(DB.getConnection()); } } }
Ext treepanel tabpanel 结合问题
<p>    现在从menu.json文件中读取菜单,点击左侧的树形菜单,右侧该如何动态加载相关模块的信息?  请各位指教 谢谢~</p> <p> </p> <p> </p> <p>    menu.json:</p> <p>  </p> <pre name="code" class="xml">{ "code":"11", "name":"信息维护", "href":"", "iconCls":"information", "parentcode":"" },{ "code":"1101", "name":"机构维护", "href":"agency", "iconCls":"building", "parentcode":"11" },{ "code":"110101", "name":"三级菜单", "parentcode":"1101" }</pre> <p> </p> <p>AccordinTreePanel.js代码</p> <p> </p> <pre name="code" class="js">Ext.ns("QM.ui"); QM.ui.MenuPanel = Ext.extend(Ext.Panel, { /** * @cfg(url) 发送请求的地址 */ /** * @cfg(root) json数组的根字符串 */ constructor: function(config){ QM.ui.MenuPanel.superclass.constructor.call(this, Ext.apply({ maxSize: 240, minSize: 210, // collapseMode: 'mini', collapsible : true, // animCollapse: false, id: 'menuPanel', width: 210, header: true, split: true, layout: 'accordion', layoutConfig : { // 展开折叠是否有动画效果 animate : true }, region: 'west', autoScroll: true, margins:'0 0 0 5', cmargins: '0 0 0 0', ref: 'menuPanel' }, config || {})); }, initComponent: function(){ QM.ui.MenuPanel.superclass.initComponent.call(this); this.addEvents( /** * @event itemclick 树结点被点击时触发 参数:node 当前结点对象,record 当前结点对应record对象 */ 'click', /** * @event afterload 菜单项加载完毕后触发 */ 'afterload'); if (!this.store) { this.store = new Ext.data.JsonStore({ url: this.url, root: this.root, fields: ['code', 'name', 'parentcode', 'iconCls', 'href'] }); } this.store.load({ callback: this.loadTrees, scope: this }); }, loadTrees: function(records, o, s){ var pnodes, trees = [], tree; this.store.sort('code'); for (var i = 0; i &lt; records.length; i++) { var record = records[i]; if (!record.get('parentcode')) { tree = this.creatTreeConfig(record); trees.push(tree); pnodes = []; pnodes.push(tree.root); } else { var next_record = records[i + 1]; var isLeaf = !next_record || next_record.get('parentcode') != record.get('code'); this.addTreeNode(pnodes, record, isLeaf); } } Ext.each(trees, function(tree){ this.add(tree); }, this); this.mon(this.el, 'click', this.onClick, this); this.doLayout(); this.store.destroy(); this.fireEvent('afterload', this); }, //@public 根据结点id找到结点对象 getNodeById: function(id){ var node, trees = this.findByType('treepanel', true); Ext.each(trees, function(tree){ node = tree.getNodeById(id); return !node;//找到的话返回false }); return node; }, onClick: function(e, t, o){ if (Ext.fly(t).hasClass('x-tree-ec-icon')) {//点击伸展按钮时无视 return; } var el, id, node; if (el = e.getTarget('.x-tree-node-el', 3, true)) { e.stopEvent(); id = el.getAttributeNS('ext', 'tree-node-id'); node = this.getNodeById(id); var workPanel = this.ownerCt.workPanel; workPanel.showTab(node); this.fireEvent('click', this, node); } }, creatTreeConfig: function(record){ var config = { xtype: 'treepanel', autoScroll: true, rootVisible: false, // useArrows:true, Vista-style的箭头 lines: true, title: record.get('name'), iconCls: record.get('iconCls'), border:false, root: { nodeType: 'async', expanded: true, id: record.get('code'), children: [] }, listeners: { 'deactivate': function(tree){ tree.getSelectionModel().clearSelections(true); } } }; return config; }, addTreeNode: function(pnodes, record, isLeaf){ var len = pnodes.length; for (var i = len - 1; i &gt;= 0; i--) { if (pnodes[i].id != record.get('parentcode')) { pnodes.pop(); } else { var parent = pnodes[i].children; var node = { text: record.get('name'), id: record.get('code'), iconCls: record.get('iconCls'), href: record.get('href'), leaf: isLeaf }; if (!isLeaf) { node.children = []; pnodes.push(node); } parent.push(node); return; } } }, //@public根据node对象/id显示结点所在tree并选中 selectNode: function(node){ var tree; if (Ext.isString(node)) { node = this.getNodeById(node); } tree = node.getOwnerTree(); this.getLayout().setActiveItem(tree.getId()); tree.expandPath(node.getPath()); tree.getSelectionModel().select(node); } }); //showTab用于显示子组件,loadChild用于子组件的加载 QM.ui.WorkPanel = Ext.extend(Ext.TabPanel, { ref: 'workPanel', region: 'center', resizeTabs: true, minTabWidth: 135, tabWidth: 135, plugins: new Ext.ux.TabCloseMenu(), enableTabScroll: true, activeTab: 0, beforeInit: Ext.emptyFn, loadChild: Ext.emptyFn, initComponent: function(){ QM.ui.WorkPanel.superclass.initComponent.call(this); this.on('tabchange', this.onChange); }, onChange: function(tp, tab){ var menuPanel = this.ownerCt.menuPanel; var tree; if (tab.itemId) { menuPanel.selectNode(tab.itemId); } else //选择主页时清空当前树的选择项 if (tree = menuPanel.getLayout().activeItem) { tree.getSelectionModel().clearSelections(true); } }, //@public根据node或id显示对象panel没有的话创建 showTab: function(node){ var menuPanel = this.ownerCt.menuPanel;//找到菜单面板 if (Ext.isString(node)) { node = menuPanel.getNodeById(node); if (!node) { return; } } var tab, attrs = node.attributes; //只有没有下级的才能显示在右侧 if(attrs.leaf){ if (!this.getItem(attrs.id)) { tab = this.add({ itemId: attrs.id, title: attrs.text, iconCls: attrs.iconCls, closable: true, layout: 'fit' }) var child = this.loadChild(tab, node); tab.add(child || {}); this.doLayout(); } this.setActiveTab(attrs.id); } } })</pre> <p> </p> <p>login.jsp 页面</p> <p> </p> <p> </p> <pre name="code" class="jsp">&lt;%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt; &lt;html&gt; &lt;head&gt; &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt; &lt;title&gt;web管理登录&lt;/title&gt; &lt;!-- 自定义Css样式 --&gt; &lt;link href="&lt;%=request.getContextPath() %&gt;/mycss/houfei-loading.css" rel="stylesheet" type="text/css" /&gt; &lt;link href="&lt;%=request.getContextPath() %&gt;/mycss/houfei-icon.css" rel="stylesheet" type="text/css" /&gt; &lt;link rel="stylesheet" type="text/css" href="&lt;%=request.getContextPath() %&gt;/css/CssStyle.css"/&gt; &lt;link rel="stylesheet" type="text/css" href="&lt;%=request.getContextPath() %&gt;/css/themes.css"/&gt; &lt;!-- Ext 所需的Js和 Css 文件 --&gt; &lt;link href="&lt;%=request.getContextPath() %&gt;/ext-3.2.1/resources/css/ext-all.css" rel="stylesheet" type="text/css" /&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/ext-3.2.1/ext-base.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/ext-3.2.1/ext-all.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/ext-3.2.1/ext-lang-zh_CN.js" charset="utf-8"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/js/TabCloseMenu.js"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/js/FileUploadField.js"&gt;&lt;/script&gt; &lt;!-- 自定义工具类 --&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/js/GridPanelUtils.js"&gt;&lt;/script&gt; &lt;!-- 主页 --&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/myjs/AccordinTreePanel.js" charset="utf-8"&gt;&lt;/script&gt; &lt;!-- 各分模块 --&gt; &lt;!-- 用户角色 --&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/myjs/userrole/AddUserRoleWindow.js" charset="utf-8"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/myjs/userrole/EditUserRoleWindow.js" charset="utf-8"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/myjs/userrole/UserRoleForm.js.js" charset="utf-8"&gt;&lt;/script&gt; &lt;script type="text/javascript" src="&lt;%=request.getContextPath() %&gt;/myjs/userrole/UserRoleGridPanel.js" charset="utf-8"&gt;&lt;/script&gt; &lt;!-- 主程序 --&gt; &lt;script type="text/javascript"&gt; Ext.ns('App'); //菜单面板 App.MenuPanel = QM.ui.MenuPanel.extend({ root: 'menus', ref: 'menuPanel', url: '/sdcdmp_czfs/myjs/menu.json', title:'导航菜单', iconCls:'houfei-icon-plugin', // tbar:[{}], listeners: { 'click': Ext.emptyFn } }); //工作区面板 App.WorkPanel = QM.ui.WorkPanel.extend({ constructor: function(config){ config = config || {}; Ext.applyIf(config, { items: [{ title: '首页', iconCls:'houfei-homeTabIcon', html: '工作平台' }] }) App.WorkPanel.superclass.constructor.call(this, config); }, //tab:子组件 node:树节点 返回待添加组件 loadChild: function(tab, node){ var attrs=node.attributes; // alert("加载子组件:"+tab.itemId+"==="+attrs.id+"href:"+attrs.href); } }); //负责直连工作区 App.afterLoad = function(viewport){ var qstr = window.location.href.split('?')[1]; if (qstr) { var ps = Ext.urlDecode(qstr); var code = ps['code']; viewport.menuPanel.on('afterload', function(){ viewport.workPanel.showTab(code); viewport.doLayout(); }, null, { single: true }); } } Ext.onReady(function(){ Ext.QuickTips.init(); Ext.BLANK_IMAGE_URL = '/sdcdmp_czfs/ext-3.2.1/resources/images/default/tree/s.gif'; // ThemeManager.init('header'); var menupanel = new App.MenuPanel(); var workpanel = new App.WorkPanel(); var view = new Ext.Viewport({ layout: 'border', items: [{ cls: 'docs-header', height: 30, region: 'north', xtype: 'box', el: 'header', border: false }, { region: 'south', xtype: 'box', el: 'bottom' }, menupanel, workpanel] }); App.afterLoad(view); }); &lt;/script&gt; &lt;/head&gt; &lt;body&gt; &lt;div id="header"&gt; &lt;div class="api-title"&gt; web管理 &lt;/div&gt; &lt;/div&gt; &lt;div id="bottom"&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;</pre> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p>
怎么获取复选框所对应的这行数据,然后在jsp页面将其隐藏掉???
``` //删除功能 $(function(){ var del; $("#dell").click(function(){ $("input:checkbox:checked").each(function(index,element){ del = $("input:checkbox[name='chkItem']:checked").map(function(index,elem) { return $(elem).val(); }).get().join(','); }) alert(del); $.ajax({ url:"http://localhost:8080/MESS/Q001_del_delete", type:"post", dataType:"json", data:{"proNo":del}, success:function(rs){ if(rs.status == 0){ alert(rs.msg); //为什么就是隐藏不了呢? $('#TQQ').hide()-----这个就是问题所在就是隐藏不了。。。。。 TSM_QPM_Q001(); }else{ alert(rs.msg); TSM_QPM_Q001(); } }, error:function(){ alert("删除加载失败 "); } }); }); }); ``` ``` //出现本页面数据就同步显示在表格中 $(function(){ TSM_QPM_Q001(); }); //进行一个函数的调用 function TSM_QPM_Q001(){ $.ajax({ url:"http://localhost:8080/MESS/getData", type:"get", datatype:"json", success:function(res){ var htmlStr =''; for(var i=0;i < res.length;i++){ var plo = res[i].proNo; //var wkStationNo = res[i].wkStationNo; htmlStr += '<tr id="myLine_'+res[i].proNo+'">'; htmlStr += '<td><input type="checkbox" id="TQQ" name="chkItem" value ="'+plo+'"></td>'; htmlStr += '<td>'+res[i].proNo+'</td>'; htmlStr += '<td>'+res[i].wkStationNo+'</td>'; htmlStr += '<td>'+res[i].stGrdNo+'</td>'; htmlStr += '<td>'+res[i].cItemName+'</td>'; htmlStr += '<td>'+res[i].cItemValue+'</td>'; htmlStr += '<td>'+res[i].wkGroup+'</td>'; htmlStr += '<td>'+res[i].wkShift+'</td>'; htmlStr += '<td>'+res[i].delFlage+'</td>'; htmlStr += '<td>'+res[i].c_memd+'</td>'; htmlStr += '<td>'+res[i].c_delsapman+'</td>'; htmlStr += '<td>'+res[i].cDelsapdate+'</td>'; htmlStr += '<td>'+res[i].cTimestamp+'</td>'; htmlStr += '<td>'+res[i].cSampleTime+'</td>'; htmlStr += '<td>'+res[i].cSw01+'</td>'; htmlStr += '<td>'+res[i].cMin+'</td>'; htmlStr += '<td>'+res[i].cMax+'</td>'; htmlStr += '<td>'+res[i].l_interval+'</td>'; htmlStr += '<td>'+res[i].r_interval+'</td>'; //htmlStr += '<a href="javascript:del('+res[i].id+')">删除</a>'; htmlStr += '</tr>'; } $("#myLine").html(htmlStr); }, error:function(){ alert("出错了!"); } }); } ``` 效果图如下: ![图片说明](https://img-ask.csdn.net/upload/201712/28/1514438430_383402.png) 现在的问题是怎么将图片中的复选框选中然后点删除按钮这条数据就消失了?其实就是隐藏。。后台数据都写好了。。就差这里怎么将选中的数据进行隐藏??
ext editorGrid 问题
我从网上看到editorGrid的一个实例,就下了下来,想学习一下,结果出现以下问题 添加用户时,id先是和最后一个id一样后来又成了始终为1了 显示数据时,总有和数据条数相同书目的空白条 [img]http://dl.iteye.com/upload/attachment/175952/13b30933-c726-36ee-b3c4-57016d5dde4b.jpg[/img] [code="java"]/** * 在线通讯录制作: 刘长炯 beansoft@126.com http://beansoft.blogjava.net/ 2008年5月 */ // 定义一个用户对象,这样便于我们动态的添加记录,虽然也可以设置成匿名内置对象 var User = Ext.data.Record.create([ // 下面的 "username" 匹配读到的标签名称 { name : 'id', type : 'int' }, { name : 'user' }, { name : 'password' } ]); /** * 创建文本列模型. * * @param {ID} * _id * @param {列名显示文本} * _header * @param {数据ID} * _dataIndex * @param {宽度} * _width 可选 * @param {是否为空} * notBlank 可选 * @param {渲染器} * _renderer 可选 * @param {自定义修改器} * _editor 可选 */ function createTextColumn(_id, _header, _dataIndex, _width, notBlank, _renderer, _editor) { var object = { id : _id, header : _header, dataIndex : _dataIndex, width : _width }; if (_editor) { object.editor = _editor; } else if (notBlank == true) { object.editor = new Ext.form.TextField({ allowBlank : false // 不能为空 }); } else { object.editor = new Ext.form.TextField(); } if (_renderer) { object.renderer = _renderer; } return object; } /** * 快速创建文本列 * * @param {数据ID} * _dataIndex * @param {列名显示文本} * _header * @param {宽度} * _width 可选 * @return {列对象} */ function qCreateColumn(_dataIndex, _header, _width) { return createTextColumn(_dataIndex, _header, _dataIndex, _width); } Ext.onReady(function() { Ext.QuickTips.init(); // 格式化日期显示 function formatDate(value) { return value ? value.dateFormat('Y, M d') : ''; } // 格式化性别显示,这是个 renderer, 渲染器 function formatSex(value) { return value ? "男" : "女"; } // 弄个缩写的别名 var fm = Ext.form; // 列模型定义了表格所有列的信息, // dataIndex 将特定的列映射到数据源(Data Store)中的数据列(在后面创建) var cm = new Ext.grid.ColumnModel([ { id : 'id', header : "编号", dataIndex : 'id', width : 50 }, /* * { id : 'username', header : "姓名", dataIndex : 'username', width : * 250, editor : new fm.TextField({ allowBlank : false // 不能为空 }) } */ createTextColumn('username', '姓名', 'user', 50, true), createTextColumn('password', '密码', 'password', 50, true) ]); // 默认情况下列是可排序的 cm.defaultSortable = true; // 创建 Data Store var store = new Ext.data.Store({ // 使用 HTTP 加载 url : 'nb_xml.jsp', // 因为返回值是 XML, 所以我们创建一个解析器 reader : new Ext.data.XmlReader({ // 记录必须包含 "user" 标签 record : 'user' }, User), sortInfo : { field : 'username', direction : 'ASC' }// 排序信息 }); // 创建编辑器表格 var grid = new Ext.grid.EditorGridPanel({ store : store, cm : cm, renderTo : 'editor-grid', width : 500, height : 300, autoExpandColumn : 'username', title : '通讯录',// 标题 frame : true, clicksToEdit : 2,// 设置点击几次才可编辑 selModel : new Ext.grid.RowSelectionModel({ singleSelect : false }),// 设置单行选中模式, 否则将无法删除数据 // 顶部工具栏按钮 tbar : [ { text : '添加用户', iconCls : 'add',// 按钮图标的CSS名称 handler : function() {// 点击按钮执行的操作 var n = grid.getStore().getCount();// 获得总行数 // 显示等待对话框 Ext.Msg.wait("请等候", "添加用户", "操作进行中..."); // 调用 DWR 进行添加操作, 操作完成后调用方法来更新界面 JUserManagerNB.addUser('user' + n , function(data) { if (data) { Ext.Msg.hide();// 隐藏对话框 var p = new User({ id : data, username : 'user'+n , password:'user' }); grid.stopEditing();// 停止编辑 store.insert(n, p);// 插入到最后一行 grid.startEditing(n, 1);// 开始编辑1单元格 } }); } }, { text : '导出为Excel格式', iconCls : 'details', handler : function() { document.location = "nb_excel.jsp"; } }, { text : '删除所选', iconCls : 'remove', handler : function() { var record = grid.getSelectionModel().getSelected();// 返回值为 // Record 类型 if (!record) { Ext.Msg.alert("提示", "请先选择要删除的行!"); return; } // 弹出对话框警告 if (record) { Ext.MessageBox.confirm('确认删除', '你真的要删除所选用户吗?', function(btn) { if (btn == 'yes') {// 选中了是按钮 // 调用 DWR, 执行结果成功时方删除所有数据 // 显示等待对话框 Ext.Msg.wait("请等候", "删除用户", "操作进行中..."); JUserManagerNB.removeUser(record.get("id"), function(data) { if (data) { // 更新界面, 来真正删除数据 store.remove(record); Ext.Msg.hide();// 隐藏对话框 } else { Ext.Msg.alert("出错了!", "单个用户数据删除失败!"); } }); } }); } } } ] }); // 单元格编辑后事件处理 grid.on("afteredit", afterEdit, grid); // 事件处理函数 function afterEdit(e) { var record = e.record;// 被编辑的记录 // 显示等待对话框 Ext.Msg.wait("请等候", "修改中", "操作进行中..."); // 调用 DWR, 执行结果成功时方删除所有数据 JUserManagerNB.editUser(record.get("id"), e.field, e.value, function(data) { if (data) { // 更新界面, 来真正删除数据 // Ext.Msg.alert('您成功修改了用户信息', "被修改的用户是:" // + e.record.get("username") + "\n 修改的字段是:" // + e.field);// 取得用户名 Ext.Msg.hide();// 隐藏对话框 // // 更改最后更新的时间,同步到后台 // JUserManagerNB.editUser(record.get("id"), 'modified', // (new Date()).clearTime()); // 更新界面 record.set('modified', (new Date()).clearTime()); } else { Ext.Msg.alert("出错了!", "修改数据失败,将重置为修改前的值!", function() { record.set(e.field, e.originalValue); }); } }); }; // 触发数据加载 store.load(); }); [/code]
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
JDK12 Collectors.teeing 你真的需要了解一下
前言在 Java 12 里面有个非常好用但在官方 JEP 没有公布的功能,因为它只是 Collector 中的一个小改动,它的作用是 merge 两个 collector 的结果,这句话
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
GitHub标星近1万:只需5秒音源,这个网络就能实时“克隆”你的声音
作者 | Google团队译者 | 凯隐编辑 | Jane出品 | AI科技大本营(ID:rgznai100)本文中,Google 团队提出了一种文本语音合成(text to speech)神经系统,能通过少量样本学习到多个不同说话者(speaker)的语音特征,并合成他们的讲话音频。此外,对于训练时网络没有接触过的说话者,也能在不重新训练的情况下,仅通过未知说话者数秒的音频来合成其讲话音频,即网
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
【管理系统课程设计】美少女手把手教你后台管理
【后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 一、这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,
4G EPS 第四代移动通信系统
目录 文章目录目录4G EPSEPS 的架构EPS 的参考模型E-UTRANUEeNodeBEPCMME(移动性控制处理单元)S-GW(E-RAB 无线访问承载接入点)P-GW(PDN 接入点)HSS(用户认证中心)PCRF(计费规则与策略)SPR(用户档案)OCS(在线计费)OFCS(离线计费)接口类型Uu 接口(空中接口,UE 和 AN 之间)S1 接口(AN 和 CN 之间)S1-U 接口和
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问