手机端web网站一个很神奇的bug求助。关于按钮的click事件执行的问题。

首先这个问题是出子在手机端web访问网站上出现的,电脑上用谷歌访问就没有这个问题。

问题是这样的
我现在有两个方法

        function test2()
        {
            DoKoutu();
            test();
        }

然后我把这几个方法绑定到几个按钮上

 <button id="koutubtn" class="buttonblue" style="width: 300px; height: 120px" onclick="DoKoutu();">抠图完成</button>
 <button id ="kakaka" class="buttonred" style="width: 300px; height: 120px" onclick="test();">保存111</button>
<button id ="kakaka2" class="buttonred" style="width: 300px; height: 120px" onclick="test2();">保存222</button>

我的问题是这样的
当我分别点 抠图完成和保存111两个按钮的时候
按理说 就执行了DoKoutu()的方法和test()的方法。执行的结果是我想要的

但是我只点击保存222这个按钮的时候,按理说不就是一起执行了DoKoutu()和test()的方法么,结果执行的结果就不是我想要的,

这是为什么呢??求助

ps:
我的函数主题有绑定一些事件的代码,是跟这块有关系么??

document.getElementById("canvasmovediv").addEventListener(STA_EN, start, false);
document.getElementById("canvasmovediv").addEventListener(MV_EV, move, false);
document.getElementById("canvasmovediv").addEventListener(END_EV, end, false);
document.getElementById("canvasmovediv").addEventListener(END_EV, end, false);

ps2:主要用了canvas里面的一些东西。上面的move,start什么的是变量,有定义的。

function DoKoutu() {
            IsKouTuOk = true;
            a.fillBackColor();
            a.CreateClipArea();
            //重建个画布,用透明的颜色把取到的点重新截取一遍图,就没有蓝线了,目的是没有蓝线

            //document.getElementById("canvasDiv1").style.display = "none";
            //这一段要是智能成图的话就不用执行了
            if (!IsAutoKouTu) {
                document.getElementById("img3").src = document.getElementById("img1").src;
                $("#img1").attr("src", $("#canvas")[0].toDataURL("image/png"));

                var b = document.getElementById("canvas2").getContext("2d");
                var bobject = document.getElementById("canvas2");
                b.beginPath();
                for (var i = 0; i < a.can.pointList.length; i++) {
                    b.lineTo(a.can.pointList[i].pointx, a.can.pointList[i].pointy);
                }
                b.closePath();
                b.clip();
                _("img3").style.width = _("img1").style.width;
                _("img3").style.height = _("img1").style.height;
                var image = document.getElementById("img3");
                //drawImage的没问题
                b.drawImage(image, 0, 0, _("img1").style.width.replace("px", ""), _("img1").style.height.replace("px", ""));
            }
            else {
                var b = document.getElementById("canvas2").getContext("2d");
                var bobject = document.getElementById("canvas2");
                var image = document.getElementById("img1");
                $("#img5").attr("src", _("img1").src);
                b.drawImage(image, 0, 0, parseInt(_("img1").style.width.replace("px", "")), parseInt(_("img1").style.height.replace("px", "")));
            }
            //两个画布隐藏或者显示一下,截图用的画布隐藏,显示用的画布显示
             document.getElementById("canvasdrowDiv").style.display = "none";
             document.getElementById("canvasmovediv").style.display = "";

            //放到一个隐藏的img上 再让这个img写回来(前清空)
            //把全图画在另一张行的div上
            //如果是自动抠图的话,直接image1的画上去,image1为智能抠图完成之后的结果
            $("#img4").attr("src", $("#canvas2")[0].toDataURL("image/png"));
            var imagetemp = document.getElementById("img4");
            //  var imageback = document.getElementById("img2");
            document.getElementById("canvasmovediv").addEventListener(STA_EN, start, false);
            document.getElementById("canvasmovediv").addEventListener(MV_EV, move, false);
            document.getElementById("canvasmovediv").addEventListener(END_EV, end, false);
            document.getElementById("canvasmovediv").addEventListener(END_EV, end, false);
            SuoFangbeishu = 1; //滚轮缩放倍数初始为1
            _("canvasmovediv").onmousewheel = scrollFnc;

            //test();
            return true;
        }
    function test() {
        var imagetemp = document.getElementById("img4");
        c = _("canvas3");
        ctx = c.getContext("2d");
        ctx.drawImage(imagetemp, 0, 0, 940, 800);
        ctxW = c.width;
        ctxH = c.height;
        imgW = 940 || img.width;
        imgH = 800 || img.height;
        ctx.translate(imgW / 2, imgH / 2);
        //onDraw();
        ctx.save();
        //选的背景图片替换div的背景图片
        document.getElementById("canvasmovediv").style.backgroundImage = "url(" + document.getElementById("img2").src + ")";
        //抠图完成的按钮变为无法使用
        _("koutubtn").disabled = "disabled";
        _("koutubtn").className = "buttonblue disabledblue";
        _("autokoutubtn").disabled = "disabled";
        _("autokoutubtn").className = "buttongreen disabledgreen";
        onDraw();
        return true;
    }

4个回答

下面两个方法的代码没仔细看,不过我想你认为结果不对,应该是两个方法中有公用的变量或者后面的方法用到了前面方法的结果吧。分别点击执行这两个方法是有顺序的,第二个方法执行的时候,第一个方法已经执行完了。
test2这样就等于让两个方法一起执行,就可能出现不同结果。你可以用settimeout延迟执行第二个方法来检查下

u012582716
墨染之樱 回复简单就好o_0: 总之有解决办法了,谢了
7 个月之前 回复
pp3736245
简单就好o_0 回复墨染之樱:这个不好判断,兼容问题是前端挺常见也挺坑的问题,浏览器、内核、手机型号什么的都可能有关,只能遇到后根据实际情况去找解决办法或者自己测试
7 个月之前 回复
u012582716
墨染之樱 回复简单就好o_0: 延迟0秒也是对的,是不是移动端web这样子就一起执行了,pc端web就是顺次执行的。有个这样一个兼容性问题?
7 个月之前 回复
pp3736245
简单就好o_0 回复墨染之樱: settimeout的话,1秒之内基本是用户无感的,可以自己多测试几次,把时间缩短又不影响结果就行了
7 个月之前 回复
pp3736245
简单就好o_0 回复墨染之樱: 你也可以在DoKoutu方法加个参数,把test()放在DoKoutu()内部最后执行,根据传入的参数判断是否执行test(),这样就能确保顺序了
7 个月之前 回复
u012582716
墨染之樱 回复: 还得再测
7 个月之前 回复
u012582716
墨染之樱 settimeout靠谱啊。。就是不知道要延迟多久
7 个月之前 回复
u012582716
墨染之樱 其实 那两个方法原来是一个方法,这个方法没达到我想的效果,结果我把他拆开分开执行又对了就很神奇
7 个月之前 回复

$("#img4").attr("src", $("#canvas2")[0].toDataURL("image/png"));
这是一个异步过程,在图像被显示出来前,就往下执行了。
到test()那块的时候,如果图像还没显示完,就不对了。

所以,当你分开执行的时候,中间需要点击按钮,这个过程中图像已经显示完了,结果正确。
而连续执行的时候,图像正在显示,所以就错了。

正确的做法应该是更改src之后要捕捉onload事件,在事件处理方法里去执行test()

你可以把这两个方法贴一下 DoKoutu(); test();

u012582716
墨染之樱 已贴,请指教
7 个月之前 回复

方法内容,期望的实现效果,出现的不期望的效果,得写一下

qq_22847605
qq_22847605 回复墨染之樱:不仅仅是代码,你可以贴一下你执行的结果,还有说明一下,你要在界面上实现怎么的展示效果,比如我要在界面上实现画一个苹果,但是我却画成了香蕉,类似的。还有只看到js代码,没看到使用的html元素
7 个月之前 回复
u012582716
墨染之樱 已贴,请指教
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
手机端web页面使用的事件有哪些
1.手机端web页面使用的事件有哪些,还能不能使用click事件了? 2.如何让网页页面最小480px;小于480px时浏览器就不能继续缩小了?
C# ASP.NET Web 程序中Button按钮如何避免多次点击,重复触发
如果我快速点击多次这个按建,就会导致一次记录了多条重复的日志。请问如何避免。 尝试过按键点击后,使按键失效。但这种反馈需要至少一次处理完成后才能反馈到页面上,这时已经记录多条了。 祈求大神帮助。 大体程序如下: .aspx一个按钮控件 ``` <asp:button id="Button1" runat="server" Text="记录日志" onclick="Button1_Click"></asp:button> ``` .cs后台程序 ``` protected void Button1_Click(object sender, System.EventArgs e) { 在数据库中记录一条日志信息 } ```
Web开发-登录界面点击登录按钮没反应
**login.html** ``` <!DOCTYPE html> <html> <head> <title>登录</title> <link rel="stylesheet" type="text/css" href="css/login.css"> <script src="js/bootstrap.min.js"></script> <script src="js/jquery.min.js"></script> <script src="js/frame.js"></script> <meta charset="UTF-8"> </head> <body> <div class="contain"> <div class="logintop"> </div> <div class="loginbody"> <div class="logindiv"> <form id="loginform" name="loginform" class="loginform"> <ul> <li> <input name="username" type="text" class="loginuser" value="" placeholder="输入账号" maxlength="100" id="username" errormsg="密码长度在6-16位之间"/> </li> <li> <input name="password" type="password" class="loginpwd" value="" placeholder="输入密码" id="password" errormsg="密码长度在6-16位之间"/> </li> <li> <input name="btnRtSubmit" type="button" class="loginbtn" id="btnRtSubmit" value="登录"/> </li> </ul> </form> </div> </div> <div class="loginbottom"> 版权所有 2019 Star-Net </div> </div> </body> </html> ``` **frame.js** ``` (function($){ alert("1"); function login(event){ alert("2"); event.preventDefault(); var userName = $("#username").val();//获取用户名 var password = $("#password").val();//获取密码 //Ajax向后台提交用户名、密码 alert("userName:"+userName+" password:"+password); $.post("/UserManager/loginController.do",{ username:userName, password:password }, function(data){ if((typeof(data)!="undefined")&&(null!= data) &&(0==data)){ //登录成功后隐藏登录表单 $(".contain").hide(); //登录成功后跳转到用户列表页 $("#content").load("/UserManager/listUserController.do"); } }); } $("#btnRtSubmit").bind("click",login);//为btnRtSubmit绑定事件 })($); ``` **我觉得问题应该出在frame.js上,但找不出问题在哪,大佬救我**
gojs中click事件如何防止沿着 GraphObject.panel的链向上冒泡
![图片说明](https://img-ask.csdn.net/upload/201912/31/1577788698_499093.png) 遇到的问题是Panel中的click事件触发会导致Node中的click事件触发,在gojs中该如何阻止这种冒泡事件呢???
不懂就问,Appium 小白,在微信切换 webview 时遇到 Original error: unknown error: Failed to get PID for com.tencent.mm:tools
##前置条件: 1.真机 OPPO R11st 2.安卓版本 7.1.1 3.真机webview 66.0.3359.126(chrome浏览器和微信内嵌webview同此版本) 4.appium 1.15.1 ###代码 public static void main(String[] args) throws Exception { //创建配置对象 DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName","OPPO R11st"); //测试平台 desiredCapabilities.setCapability("platformName", "Android"); //安卓系统版本 desiredCapabilities.setCapability("paltformVersion", "7.1.1"); desiredCapabilities.setCapability("appPackage", "com.tencent.mm"); desiredCapabilities.setCapability("appActivity", ".ui.LauncherUI"); //不清除数据启动 desiredCapabilities.setCapability("noReset", "True"); desiredCapabilities.setCapability("recreateChromeDriverSessions","True"); //自动化引擎(解决输入框不能输入的问题) desiredCapabilities.setCapability("automationName", "uiautomator2"); // 支持X5内核应用自动化配置 desiredCapabilities.setCapability("recreateChromeDriverSessions", true); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("androidProcess", "com.tencent.mm:tools"); desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options); desiredCapabilities.setCapability("browserName",""); //创建驱动 androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); //元素超时等待 androidDriver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); weChat(); //关闭驱动 androidDriver.quit(); } public static void weChat() throws Exception { Thread.sleep(5000); androidDriver.findElementById("com.tencent.mm:id/r_").click(); androidDriver.findElementById("com.tencent.mm:id/m7").sendKeys("接口测试号"); androidDriver.findElementById("com.tencent.mm:id/s7").click(); androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"贷款\")").click(); androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"卢贝尔TEST\")").click(); Thread.sleep(15000); Set<String> context = androidDriver.getContextHandles(); for(String contextname : context){ System.out.println(contextname);//打印 if(contextname.equals("WEBVIEW_com.tencent.mm:tools")) androidDriver.context(contextname); } System.out.println(androidDriver.findElementsByXPath("//*").toString()); System.out.println("进来了。。。。。。"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[2]/div[1]/img").click(); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[2]/div[1]/input").sendKeys("13983871447"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[2]/div[2]/div").sendKeys("qwe000111"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[3]/input").click(); Thread.sleep(25000); } ##appium详细信息 ###这里可以看到pid是被找到了的 ``` [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '21104' pkg: 'com.tencent.mm:tools' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 21104 997 3907284 381152 efg 0 0000000000 S com.tencent.mm:tools [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:tools' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '20267' pkg: 'com.tencent.mm' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 20267 997 3487468 300536 efg 0 0000000000 S com.tencent.mm [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '20643' pkg: 'com.tencent.mm:appbrand0' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 20643 997 3474560 255204 unk 0 0000000000 S com.tencent.mm:appbrand0 [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:appbrand0' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '21040' pkg: 'com.tencent.mm:toolsmp' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 21040 997 3227048 264568 unk 0 0000000000 S com.tencent.mm:toolsmp [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:toolsmp' [2020-01-20 04:08:12][AndroidDriver] Found webviews: ["WEBVIEW_com.tencent.mm:tools","WEBVIEW_com.tencent.mm:appbrand0","WEBVIEW_com.tencent.mm","WEBVIEW_com.tencent.mm:toolsmp"] [2020-01-20 04:08:12][AndroidDriver] Available contexts: ``` ##appium报错信息 ``` [2020-01-20 04:08:12][Chromedriver] Starting MJSONWP Chromedriver session with capabilities: { [2020-01-20 04:08:12][Chromedriver] "desiredCapabilities": { [2020-01-20 04:08:12][Chromedriver] "chromeOptions": { [2020-01-20 04:08:12][Chromedriver] "androidPackage": "com.tencent.mm", [2020-01-20 04:08:12][Chromedriver] "androidUseRunningApp": true, [2020-01-20 04:08:12][Chromedriver] "androidProcess": "com.tencent.mm:tools", [2020-01-20 04:08:12][Chromedriver] "args": [], [2020-01-20 04:08:12][Chromedriver] "extensions": [], [2020-01-20 04:08:12][Chromedriver] "androidDeviceSerial": "8905da57" [2020-01-20 04:08:12][Chromedriver] }, [2020-01-20 04:08:12][Chromedriver] "loggingPrefs": { [2020-01-20 04:08:12][Chromedriver] "browser": "ALL" [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][WD Proxy] Matched '/session' to command name 'createSession' [2020-01-20 04:08:12][WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidProcess":"com.tencent.mm:tools","args":[],"extensions":[],"androidDeviceSerial":"8905da57"},"loggingPrefs":{"browser":"ALL"}}} [2020-01-20 04:08:14][WD Proxy] Got response with status 200: {"sessionId":"db8120c4243d3b2e3714bb62b5357a5b","status":13,"value":{"message":"unknown error: Failed to get PID for the following process: com.tencent.mm:tools\n (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)"}} [2020-01-20 04:08:14][WD Proxy] Determined the downstream protocol as 'MJSONWP' [2020-01-20 04:08:14][WD Proxy] The response has an unknown format [2020-01-20 04:08:14][MJSONWP] Matched JSONWP error code 13 to UnknownError [2020-01-20 04:08:14][Chromedriver] Failed to start Chromedriver session: An unknown server-side error occurred while processing the command. Original error: unknown error: Failed to get PID for the following process: com.tencent.mm:tools [2020-01-20 04:08:14][Chromedriver] (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64) [2020-01-20 04:08:14][WD Proxy] Matched '/session' to command name 'createSession' [2020-01-20 04:08:14][WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidProcess":"com.tencent.mm:tools","args":[],"extensions":[],"androidDeviceSerial":"8905da57"},"loggingPrefs":{"browser":"ALL"}}} [2020-01-20 04:08:15][WD Proxy] Got response with status 200: {"sessionId":"41893d46f51c7c60c153a16cd7cfe42f","status":13,"value":{"message":"unknown error: Failed to get PID for the following process: com.tencent.mm:tools\n (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)"}} [2020-01-20 04:08:15][WD Proxy] Determined the downstream protocol as 'MJSONWP' [2020-01-20 04:08:15][WD Proxy] The response has an unknown format [2020-01-20 04:08:15][MJSONWP] Matched JSONWP error code 13 to UnknownError [2020-01-20 04:08:15][Chromedriver] Failed to start Chromedriver session: An unknown server-side error occurred while processing the command. Original error: unknown error: Failed to get PID for the following process: com.tencent.mm:tools ```
关于实时监控onclick的疑问 麻烦各位前辈了
html的代码 ``` <input type="text " class="time_set" id="PlanTime_1" onclick="WdatePicker({dateFmt:'H:mm'})"> ``` js的代码 ``` $(".time_set").click(function(){ let timeId,timeVal; timeId=thsi.id; timeVal=$("#"+timeId).val(); console.log("修改id为"+timeId+“值为”+timeVal); }) ``` 是这样的 网页上有一个输入框 一开始是空白的 可以输入时间 我绑定了一个现成的插件,我想要的效果就是每次选择完时间后可以打印出来 但实际效果是当我第一次点击的时候 由于是空白的 导致提出来的值是空的 如果里面是8:00 我点击这个框去修改为9:00 他会打印出来是8:00 而不是最新的 9:00 是不是我不应该用click来监控 不知道我问题描述清楚没有 网页小白 其他都可以百度 但这个问题 百度了一圈没找到 特来求助
vue ajax上传文件时Java后端报错
我正在做一个上传头像功能,前端使用vue.js,后端是springboot构建的项目,但是每次vue请求传到后端时,都会报格式错误。代码如下: 后端接口: @PostMapping("/userinfo/uploadHeadImg") public AjaxResult<?> uploadHeadImg(@RequestParam MultipartFile file, @RequestParam Integer userInfoId) throws Exception{ return tbUserinfoService.uploadHeadImg(file,userInfoId); } html部分: <div class="setting-head"> <!--个人头像--> <div class="user-head-img" > <div class="use-click" @click="uploadHeadImg"> <el-avatar :size="60" :src="userHeadImg" > </el-avatar> <input type="file" accept="image/*" class="hiddenInput" @change="handleFile"/> </div> </div> </div> js部分: handleFile: function (e) { let $target = e.target || e.srcElement; let file = $target.files[0]; var reader = new FileReader(); reader.onload = (data) => { let res = data.target || data.srcElement; this.$store.dispatch("uploadHeadImg",file); }; reader.readAsDataURL(file) }, store.js 文件部分: ``` actions:{ uploadHeadImg({commit,state},file){ Vue.http.post('/userinfo/uploadHeadImg',{file:file,userInfoId:state.userInfoId}, {headers: { 'Content-Type': 'multipart/form-data' }}, ).then(function(res){ var result = res.data; if(result.code=="200"){ this.userHeadImg = res.result; commit("setUserHeadImgFile",file); } }) } ``` 报错现象分两种情况: 当store.js部分添加了 {headers: { 'Content-Type': 'multipart/form-data' }}, 后,后端报错如下: Resolved [org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found] 我在网上找了大部分的解决方式是说去掉 header请求中的 Content-Type就行了。 <br> 但是当我去掉这部分后报错又变成了: Resolved [org.springframework.web.multipart.MultipartException: Current request is not a multipart request] 网上搜索解决方式:说请求头添加 <br> 'Content-Type': 'multipart/form-data' 陷入死循环中.... 希望有熟悉这部分的老哥可以帮忙请求看看,谢谢!!! 通过postman测试,后端接口成功,但就是通过vue访问就会报错
每次点击回到顶部按钮时,页面会闪一下,看着就是顶部,然后才会慢慢往上滑动,怎样解决闪一下的问题?麻烦看下js有问题吗?
var backButton=$('.back_to_top'); $(document).ready(function () { function backToTop() { $('html,body').animate({ scrollTop: 0 }, 800); } backButton.on('click', backToTop); $(window).on('scroll', function () {/*当滚动条的垂直位置大于浏览器所能看到的页面的那部分的高度时,回到顶部按钮就显示 */ if ($(window).scrollTop() > $(window).height()) backButton.fadeIn(); else backButton.fadeOut(); }); $(window).trigger('scroll');/*触发滚动事件,避免刷新的时候显示回到顶部按钮*/ })
iview-admin 新建表单重复提交的问题?或者说是新建页面出现两个tab的问题?
*再打开“新建表单”的页面是,点击刷新网页后,tab会出现两个新建页面,发布完成后自动关闭,只能关闭一个。刚才输入的内容会保存在另一个新建页面里面,用户不知道的情况下,就会再点一次保存,就出现了两次提交车现象。* 有没有人遇到过?求指教。 ![图片说明](https://img-ask.csdn.net/upload/202001/08/1578472720_653254.png) 新建页面,不在左边的路由中显示,通过发布页面里面的“新建”按钮弹出。 ``` <Button @click="handleOpenCreate(0)" ><Icon type="md-add" /> 新建</Button> handleOpenCreate (status) { this.$router.push({ name: 'tickets_create', params: { curStatus: status } }) }, ```
qt用按钮和QProcess进行连接,QProcess单独用没报错,连接后在connect括号里list报错
#include "widget.h" #include "ui_widget.h" #include"QPushButton"//按钮控件头文件 #include <QProcess> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); QPushButton *btn = new QPushButton; btn->show();//显示窗口 btn->setParent(this);//依附在这个窗口 btn->setText("二叉树递归前序遍历");//设置文字名称 btn->resize(160,50);//设置按钮大小 btn->move(0,0); QString url = "E:\\qt\\a.exe"; //注意必须是 反斜杠\\ QStringList list; list.append(url ); //文件的路径作为notepad的一个命令参数 connect(btn, &QPushButton::click,this,QProcess::execute("explorer",list)); }
js怎么设置按钮点击后改变颜色
我已经设置好三个按钮,怎么设置js可以实现点击按钮后。此按钮颜色改变,其他2个按钮颜色不变。 ``` <!DOCTYPE html> <html> <head> <title></title> </head> <script src="js/jquery-1.10.2.min.js" type="text/javascript" charset="utf-8"></script> <script> $(function(){ $("#btn1").click(function() { $("#content1").toggle(); var str = btn.innerHTML =="按钮1"? "显示":"按钮1"; btn.innerHTML =str; }); $("#btn2").click(function() { $("#content2").toggle(); var str = btn.innerHTML =="隐藏"? "显示":"隐藏"; btn.innerHTML =str; }); $("#bt3").click(function() { $("#content3").toggle(); var str = btn.innerHTML =="隐藏"? "显示":"隐藏"; btn.innerHTML =str; }); }); </script> <body> <button id="btn1" >第一页1</button> <button id="btn2" >第二页2</button> <button id="btn3" >第三页</button> <p id="content1">1也许明天,也许梦里,我重新拾起我最爱的诗,感动了所有的风和日丽</p> <p id="content2">2也许明天,也许梦里,我重新拾起我最爱的诗,感动了所有的风和日丽</p> <p id="content3">3也许明天,也许梦里,我重新拾起我最爱的诗,感动了所有的风和日丽</p> </body> </html> ```
.net+vue+iview新手提问
初次使用vue+iview做项目所以有些低级问题与要大佬们赐教 我在iview官网粘贴的table组件的代码,在按钮的地方官网上给的是这样的 render(row, column, index) { return `<i-button type="primary" size="small" @click="show(${index})">查看</i-button> <i-button type="error" size="small" @click="remove(${index})">删除</i-button>`; } 编译后会报一个错误![图片说明](https://img-ask.csdn.net/upload/202001/11/1578728087_242827.png) 当我把代码换成这样的时候 render(row, column, index) { return `<i-button type="primary" size="small" @@click="show(${index})">查看</i-button> <i-button type="error" size="small" @@click="remove(${index})">删除</i-button>`; } 他会有这样的问题![图片说明](https://img-ask.csdn.net/upload/202001/11/1578728193_374614.png) 所以我想知道table按钮那个该怎么解决 这是我的代码,大佬们求指点 ``` @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>用户管理</title> <script src="~/Scripts/vue.js"></script> <script src="~/Scripts/IView/iview.js"></script> <link href="~/Content/Iview/iview.css" rel="stylesheet" /> <script> export default { data() { return { self: this, columns7: [ { title: '姓名', key: 'name', render(row, column, index) { return `<Icon type="person"></Icon> <strong>${row.name}</strong>`; } }, { title: '年龄', key: 'age' }, { title: '地址', key: 'address' }, { title: '操作', key: 'action', width: 150, align: 'center', render(row, column, index) { return `<i-button type="primary" size="small" @@click="show(${index})">查看</i-button> <i-button type="error" size="small" @@click="remove(${index})">删除</i-button>`; } } ], data6: [ { name: '王小明', age: 18, address: '北京市朝阳区芍药居' }, { name: '张小刚', age: 25, address: '北京市海淀区西二旗' }, { name: '李小红', age: 30, address: '上海市浦东新区世纪大道' }, { name: '周小伟', age: 26, address: '深圳市南山区深南大道' } ] } }, methods: { show(index) { this.$Modal.info({ title: '用户信息', content: `姓名:${this.data6[index].name}<br>年龄:${this.data6[index].age}<br>地址:${this.data6[index].address}` }) }, remove(index) { this.data6.splice(index, 1); } } } </script> </head> <body> <template> <i-table border :content="self" :columns="columns7" :data="data6" ></i-table> </template> </body> </html> ```
一个奇怪的c#客户端 异步事件调用datagridview控件的问题
我的客户端有两个界面,下面就简称为Form1 和Form2。 Form1有一个datagridview控件,需要有的操作就是在控件里循环载入数据库中的数据并清空再下一轮载入数据。 Form2的功能是监听网络请求并如果收到请求告诉Form1开始工作。 然后问题就来了如果 在Form1 中调用这个操作没有任何问题,如果用Form2调用这个操作的方法(这里是用了一个委托事件触发的,而且因为在调用Form中方法的同时还需要保持监听,所以用线程池做成异步来处理)就会返回main主函数抛出一个空指针异常,但是我断点调试没有找到空指针的对象。异常如图: ![图片说明](https://img-ask.csdn.net/upload/201912/13/1576202647_246492.png) ![图片说明](https://img-ask.csdn.net/upload/201912/13/1576202720_799585.png) 然后上错误代码: Form1对控件操作: ``` public void test() { Monitor.Enter(this); try { for (int i = 0; i < 7; i++) { Control.CheckForIllegalCrossThreadCalls = false; string fn = list[i]; OpenDB(fn); //Thread.Sleep(1000); } } finally { Monitor.Exit(this); } } void connectToDB(string fn) { m_dbConnection = new SQLiteConnection("Data Source=" + fn + ";Version=3;"); //m_dbConnection.SetPassword("abc"); m_dbConnection.SetPassword("1234LiaoQiu4321"); m_dbConnection.Open(); } public void OpenDB(string fn) { try { string sql; SQLiteCommand command; connectToDB(fn); sql = @"SELECT * FROM [评分细则] ORDER BY [步骤];"; command = new SQLiteCommand(sql, m_dbConnection); SQLiteDataReader reader = command.ExecuteReader(); dataGridView2.Rows.Clear(); object[] obj = new object[10]; while (reader.Read()) { for (int i = 0; i < 10; ++i) { obj[i] = reader[i]; } dataGridView2.Rows.Add(obj); } reader.Close(); } catch //(Exception ex) { MessageBox.Show("打开失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } finally { m_dbConnection.Close(); } } /// <summary> /// 事件订阅 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 其他窗口运行ToolStripMenuItem_Click(object sender, EventArgs e) { Form2 ab = new Form2(); ab.getEvent += test; ab.Show(); } ``` Form2: ``` public delegate void getHandler(); public event getHandler getEvent; private void button1_Click(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(new WaitCallback(test), new object()); } public void test(object val) { getEvent(); } ``` Form2这里是我写的一个模拟错误调用的demo,因为监听网络调用调式比较麻烦,所以用button模拟触发 收到消息这个动作。考虑过跨线程调用控件的问题,所以已经加了禁用语句。 问题奇怪的地方有三个:1.如果是Form1本身的线程调用,或者Form2中不加异步就不会抛异常;2,调试时发现循环第一次不会出错,也就是会往控件里加载一次数据,但是第N次循环就可能会出现问题,出错的循环次数是哪一次无法确定,但是肯定会有一次出错。3.报错的位置不在调试时卡住的地方而是回到main主函数报错 而且目前找到一种解决办法就是在循环提内加入延迟,就是Thread.Sleep(500),这样也不会报错,但是不理解这样做就不报错的原因
vue项目,在切换路由时内存没有释放,再次切换回原路由或者是其他页面,为什么内存又被释放了?
先说一下环境:vue:2.5.2 vue-router:3.0.1 element-ui:2.13.0 最开始存在三个页面HelloWorld、foo和bar。 分别说一下这两个页面都有什么: HelloWorld页面,有一个请求(会请求一些数据),将请求回来的数据放到data中,并用element-ui的select组件进行展示,另外就是一个跳转至foo页面的按钮,代码如下: ``` <template> <div class="hello"> <el-button @click="getAccountListPage"> page获取科目列表 </el-button> <el-select v-model="activeAcc" placeholder="请选择"> <el-option v-for="item in accountPageList" :key="item.id" :label="item.codeAndName" :value="item.id"> </el-option> </el-select> <el-button @click="goToFoo"> go Foo </el-button> </div> </template> <script> export default { name: 'HelloWorld', data () { return { activeAcc: '', accountPageList: [] } }, methods: { getAccountListPage() { let xmlhttp, that = this; 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) { let res = JSON.parse(xmlhttp.response); if(res.result) { that.accountPageList = res.value; } } }; xmlhttp.open("POST","******这里是url*******",true); xmlhttp.setRequestHeader("Content-type","application/json"); xmlhttp.send('{}'); }, goToFoo() { this.$router.push({name: 'foo'}) } }, } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped></style> ``` foo页面,很简单,有一个跳转至HelloWorld页面的按钮和一个跳转至bar页面的按钮,代码如下: ``` <template> <div class="foo"> 这是Foo页面 <el-button @click="goToHelloWorld"> go HelloWorld </el-button> <el-button @click="goToBar"> go Bar </el-button> </div> </template> <script> export default { name: 'Foo', data () { return {} }, computed: {}, methods: { goToHelloWorld() { this.$router.push({name: 'HelloWorld'}) }, goToBar() { this.$router.push({name: 'bar'}) } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped></style> ``` bar页面和foo页面一样,有一个跳转至HelloWorld页面的按钮和一个跳转至foo页面的按钮,代码如下: ``` <template> <div class="bar"> 这是Bar页面 <el-button @click="goToHelloWorld"> go HelloWorld </el-button> <el-button @click="goToFoo"> go Foo </el-button> </div> </template> <script> export default { name: 'Bar', data () { return { } }, computed: {}, methods: { goToHelloWorld() { this.$router.push({name: 'HelloWorld'}) }, goToFoo() { this.$router.push({name: 'foo'}) } }, } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped></style> ``` 操作步骤: 1.进入HelloWord页面,不做任何操作,利用chrome浏览器开发者工具中的Performance monitor工具,查看内存使用情况 ![图片说明](https://img-ask.csdn.net/upload/201912/31/1577778311_366832.png) 2.点击按钮获取数据,查看内存 ![图片说明](https://img-ask.csdn.net/upload/201912/31/1577778454_982794.png) 可以看到,js、dom nodes、 js event,都有所增加。 3.跳转至foo页面,查看内存 ![图片说明](https://img-ask.csdn.net/upload/201912/31/1577778614_138117.png) 这时候发现内存占用情况并没有明显变化,也就是说跳转foo页面后,helloword页面的内存并未得到释放。这是问题一。 4.这时候跳转至bar页面,查看内存 ![图片说明](https://img-ask.csdn.net/upload/201912/31/1577778782_257327.png) 可以看到,刚刚存在的内存占用已经被释放了。这是问题二。 上面的截图都是我手动垃圾回收(collect garbage)后的截图。 对于上面出现的两个问题,还请各位大佬解答一下,万分感谢!!!
求解关于js拷贝的问题
我跟着教程学的程序已经正常运行,但我有一点不能理解 问题是这样的。实现数据的单项绑定 ``` //左侧模板类目 var itemTmpl = `<div class="menu-item"> <img class="img" src="$picture" /> <div class="menu-item-right"> <p class="item-title">$name</p> <p class="item-description">$description</p> <p class="item-zan">$praise_content</p> <p class="item-price">¥$min_price<span class="unit">/$unit</span></p> </div> <div class="select-content"> <div class="minus"></div> <div class="count">$chooseCount</div> <div class="plus"></div> </div> </div>` //这里因为外面穿入了data,我们就不自己get了 function getList(data){ var list =data; initRightList(list); } //渲染列表 parma array 就是spus function initRightList(list){ $('.right-list-inner').html(''); list.forEach((item, index) => { if(!item.chooseCount){ item.chooseCount = 0; //在这里创建的chooseCount } var str = itemTmpl.replace('$picture', item.picture) .replace('$name', item.name) .replace('$description', item.description) .replace('$praise_content', item.praise_content) .replace('$min_price', item.min_price) .replace('$unit', item.unit) .replace('$chooseCount', item.chooseCount); var $target = $(str); $target.data('itemData', item); $('.right-list-inner').append($target); }); } //渲染title parma array function initRightTitle(str){ $('.right-title').text(str); } //给按钮绑定点击事件 function addClick(){ $('.menu-item').on('click', '.plus', (e) => { var $count = $(e.currentTarget).parent().find('.count'); $count.text(parseInt($count.text() || '0') + 1); var item = $(e.currentTarget).parents('.menu-item').first();//用first是因为可能是一个数组 var itemData = item.data('itemData'); itemData.chooseCount = itemData.chooseCount + 1; console.log('我为这个项目添加了chooseCount', itemData); console.log('我是更改了之后的总数据window.food_spu_tags', window.food_spu_tags); window.ShopBar.renderItems(); }); $('.menu-item').on('click', '.minus', (e) => { var $count = $(e.currentTarget).parent().find('.count'); if($count.text() == 0) return; $count.text(parseInt($count.text() || '0') - 1); var item = $(e.currentTarget).parents('.menu-item').first();//用first是因为可能是一个数组 var itemData = item.data('itemData'); itemData.chooseCount = itemData.chooseCount - 1; window.ShopBar.renderItems(); }); } function init(data){ //这里的data指的是food_spu_tags,也就是list getList(data.spus || []); initRightTitle(data.name || ''); addClick(); } //不能直接用init()的原因是,如果用了就会直接调用,但此时init的data还没传入 window.Right = { refresh: init } ``` 注意那个点击事件,点击完后就调用了shopbar.js 代码如下 ``` //顶部模板字符串 var itemTopTmpl = `<div class="choose-content"> <div class="content-top"> <div class="clear-car">清空购物车</div> </div> </div>`; //底部模板字符串 var itemBottomTmpl = `<div class="bottom-content"> <div class="shop-icon"> <div class="dot-num hide">1</div> </div> <div class="price-content"> <p class="total-price">¥<span class="total-price-span">0</span></p> <p class="other-price">另需配送&nbsp;¥<span class="shipping-fee">0</span></p> </div> <div class="submit-btn">去结算</div> </div>`; var $strBottom = $(itemBottomTmpl); var $strTop = $(itemTopTmpl); function init(data){ $('.shop-bar').append($strTop); $('.shop-bar').append($strBottom); } function renderItems(){ $strTop.find('.choose-item').remove(); var list = window.food_spu_tags || []; var tmpl = `<div class="choose-item"> <div class="item-name">$name</div> <div class="price">¥<span class="total">$price</span></div> <div class="select-content"> <div class="minus"></div> <div class="count">$chooseCount</div> <div class="plus"></div> </div> </div>` var totalPrice = 0; list.forEach((item, index) => { item.spus.forEach((_item) => { //如果有菜品数量大于0就开始渲染这条数据 if(_item.chooseCount > 0){ //计算每个菜品的总价就是单价x数量 var price = _item.min_price*_item.chooseCount; var row = tmpl.replace('$name', _item.name) .replace('$price', price) .replace('chooseCount', _item.chooseCount); // 计算整个总价 totalPrice += price; var $row = $(row); $row.data('itemData', _item); //这里的row就是改了数据的tmpl,是div.choose-item $strTop.append($row); } }) }); } window.ShopBar = { renderItems: renderItems } init(); ``` 我觉得很奇怪的点在上面那个JS的点击事件,他不是复制了一个IitemData等于jquery对象里传递过来的数据了吗,但之后改动他为什么前面暴露出来的window_spu_tags会变啊,是因为深浅拷贝的原因吗,有人能帮我细讲吗,如果要变成深拷贝应该怎么改?
vue的vuescroll插件苹果手机滑动不了,安卓手机没有问题
大佬们救助啊!!! ```<template> <div style="margin-top:-80px;"> <div class="page__hd"> <div class="weui-form-preview__ft"> <label class="weui-form-preview__btn weui-form-preview__btn_default"> <span @click="toIndex" style="color:rgb(0, 0, 0);">&lt;返回</span> </label> <label type="submit" class="weui-form-preview__btn weui-form-preview__btn_primary" href="javascript:" style="color:rgb(0, 0, 0);" >{{this.zqName}}合同</label> <label type="submit" class="weui-form-preview__btn weui-form-preview__btn_primary" style="color:rgb(0, 0, 0);" @click="select" > 筛选 <img src="../assets/000.png" height="20px" width="20px" /> </label> </div> </div> <div class="pr-wrap_tra" style=" overflow-y: scroll;touch-action: pan-y;-webkit-overflow-scrolling: touch;"> <div class="wrap-part_tra first_tra" > <vuescroll ref="vs" :ops="ops" @refresh-start="handleRS" @load-before-deactivate="handleLBD" @refresh-before-deactivate="handleRBD" @load-start="handleLoadStart" > <div v-for="item in ContractList" :key="item.dictid"> <div class="contractList_css_tra"> <div class="list_css_tra" @click="jumppage(item.dictid)"> <span style="float:left;">{{item.farmername}}</span> <span style="float:right;" v-if=" item.isrecord=== 0">糖厂未上报</span> <span style="float:right;" v-if=" item.isrecord=== 1">乡政府退回</span> <span style="float:right;" v-if=" item.isrecord=== 2">县政府退回</span> <span style="float:right;" v-if=" item.isrecord=== 5">糖厂已上报</span> <span style="float:right;" v-if=" item.isrecord=== 6">乡政府已上报</span> <span style="float:right" v-if=" item.isrecord=== 7">县政府已备案</span> <br /> <span style="color:#4169E1;float:left;margin-top: -5px;">({{item.ocnum}})</span> <!-- <p style="float:left; font-size:15px; color:#C0C0C0; margin-top: 5px" >&nbsp;&nbsp;{{item.signdate}}</p> --> <br /> <hr style="width: 100%;" /> <div class="tr_css_tra"> <table class="table_css_tra"> <tr class="title_tra"> <td>种植面积</td> <td>种植产量</td> <td>风险值</td> </tr> <tr class="content_tra"> <td>{{item.area?item.area.toFixed(2):0}} <span style="font-weight:bold;font-size: 13px;">亩</span> </td> <td>{{item.yeild?item.yeild.toFixed(2):0}} <span style="font-weight:bold;font-size: 13px;">吨</span></td> <td v-if=" item.isrecord == 0"> <span style="font-weight:bold;font-size: 13px;">-</span></td> <td v-if=" item.isrecord > 0 && item.matchstate ==0"> <span style="font-weight:bold;font-size: 13px;">计算中</span></td> <td v-if=" item.isrecord > 0 && item.matchstate ==1"> {{item.riskevaluation}} <span style="font-weight:bold;font-size: 13px;">%</span></td> </tr> </table> </div> <hr style="width: 100%;" /> <span style="float:left; margin-top: 10px; ">{{item.departname?item.departname:''}}</span> <span style="float:right; margin-top: 10px;">详情></span> </div> </div> </div> <div id="nodata" style="display:none">{{this.context}}</div> </vuescroll> </div> </div> </div> </template> <script> import vuescroll from "vuescroll"; import farmers from "@/api/farmers"; import indexApi from "@/api/index"; import Vue from "vue"; import axios from "axios"; export default { name: "myvuescroll", props: { // 语言 lang: { default: "zh" // en }, // 距离底部触发自动加载的距离 autoLoadDistance: { default: 10 }, // 是否开启下拉刷新 isRefresh: { default: true }, // 是否开启上拉加载 isPushLoad: { default: true }, // 数据是否全部加载完成 true为全部加载完成 noData: { default: false }, // 下拉刷新开始 refreshStart: { default: () => {} }, // 下拉刷新完成之后 refreshDeactivate: { default: () => {} }, // 上拉开始 loadStart: { default: () => {} }, // 上拉完成之后 loadDeactivate: { default: () => {} } }, components: { vuescroll }, data() { const config = {}; const ops = { vuescroll: { mode: "slide", pullRefresh: { enable: this.isRefresh }, pushLoad: { enable: this.isPushLoad, auto: true, //是否自动触发加载 autoLoadDistance: this.autoLoadDistance } } }; if (this.lang == "zh") { ops.vuescroll.pullRefresh.tips = { deactive: "下拉刷新", active: "释放刷新", start: "刷新中...", beforeDeactive: "刷新成功!" }; ops.vuescroll.pushLoad.tips = { deactive: "上拉加载", active: "释放加载", start: "加载中...", beforeDeactive: "加载成功!" }; } return { ops, config, pageNo: 1, isfirstload: false, end: 0, is: true, ContractList: [], zqName: "", minrisk: 0, maxrisk: 0, farmersName: "", contractCode: "", record: "", data: {}, zqCode: "", departCode: "", xzCode:"", user:{}, sx:true, xl:true, presser:'', context:'', //, maxarea:0, // minarea:0, // isrecord:0, // ocnum:0, // farmername:'' }; }, // created: function() { // this.myInstalHomeFun(); // }, created:function(){ this.user = this.$route.params.user; this.zqCode = this.$route.params.zqCode; this.departCode = this.$route.params.departCode; this.xzCode=this.$route.params.xzCode; this.zqName = this.$route.params.zqName; this.presser = this.$route.params.presser; }, mounted: function() { this.minrisk = this.$route.params.minrisk; this.maxrisk = this.$route.params.maxrisk; this.farmersName = this.$route.params.farmersName; this.contractCode = this.$route.params.contractCode; this.record = this.$route.params.record; this.FarmersContractList(); //需要触发的函数 // alert(this.minrisk) // alert(this.maxrisk) // alert(this.farmersName) // alert(this.contractCode) // alert(this.record) }, methods: { // FarmersContractList() { // let _this = this; // axios({ // url: // "/api/cloudec/fo/order/OrderContractController/GetOrderContractPage", // method: "post", // data: { // pageNo: 1, // pageSize: 10 // this.data=this.$route.query; // // this.maxarea=this.$route.query.maxarea; // // this.minarea=this.$route.query.minarea; // // this.isrecord=this.$route.query.isrecord; // // this.ocnum=this.$route.query.ocnum; // // this.farmername=this.$route.query.farmername; // }, // 刷新开始 // vsInstance vm===this // refreshDom === 刷新dom handleRS(vsInstance, refreshDom, done) { if (this.refreshStart) { this.refreshStart(done); } else { //this.setDone1(done); done(); } }, // 刷新完之后 handleRBD(vm, loadDom, done) { if (this.refreshDeactivate) { this.refreshDeactivate(done); } else { setTimeout(() => { this.setDone1(done); }, 600); } }, // 上拉开始 handleLoadStart(vm, dom, done) { if (this.loadStart) { this.loadStart(done); } else { if (this.isfirstload) { //this.setDone(done); done(); } else { done(); this.isfirstload = true; } } }, // 上拉完成后 handleLBD(vm, loadDom, done) { if (!this.$parent.noData) { if (this.loadDeactivate) { this.loadDeactivate(done); } else { setTimeout(() => { this.setDone(done); //done(); }, 600); } } else { setTimeout(() => { this.setDone(done); //done(); }, 600); } }, // 手动触发 外部通过ref触发 // type load 为加载 refresh 为刷新 trigger(type = "load") { this.$refs["vs"].triggerRefreshOrLoad(type); }, setDone(done) { if(this.sx){ this.pageNo++; this.FarmersContractList(); } done(); }, setDone1(done) { if(this.xl){ this.xl=false; this.ContractList = []; this.is=true; this.pageNo = 1; this.FarmersContractList(); } done(); }, FarmersContractList(done) { let _this = this; if (_this.is) { indexApi.FarmersContractList(this.pageNo,this.maxrisk,this.minrisk,this.record,this.contractCode,this.farmersName,this.departCode, this.zqCode,this.presser,this.xzCode,this.zj) .then(function(response) { // response.data中获取ResponseData实体 // alert(response); if(response.data.pageSize==0){ _this.context="暂无数据"; } for (var i = 0; i < response.data.page.dataList.length; i++) { _this.sx=false; _this.xl=false; _this.ContractList.push(response.data.page.dataList[i]); } _this.sx=true; _this.xl=true; if (response.data.page.totalPage == _this.pageNo) { _this.is = false; _this.context="暂无更多数据"; } //_this.ContractList = response.data.page.dataList; }) .catch(function(error) { // 发生错误 }); } else { //document.getElementById("nodata").style.display = "block"; } }, select() { this.$router.replace({ name: "select", params: { user: this.user, departCode:this.departCode, zqCode:this.zqCode, xzCode:this.xzCode, zqName:this.zqName, presser:this.presser } }); }, jumppage(val) { this.$router.replace({name: "contractInfo", params: { user: this.user,dictid: val, departCode:this.departCode, zqCode:this.zqCode, xzCode:this.xzCode, zqName:this.zqName, presser:this.presser}}); }, toIndex(){ this.$router.replace({name: "index"+this.user.wxUserInfo.userType, params: { user: this.user}}); } } }; </script> <style> .pr-wrap_tra { display: flex; height: calc(93vh); justify-content: center; width: 100%; } .pr-wrap_tra .wrap-part_tra { height: 100%; width: 100%; } .pr-wrap_tra .wrap-part_tra .first_tra { width: 100%; width: 100%; } .contractList_css_tra { position: relative; margin: 0 auto; width: 90%; height: 170px; background-color: #ffffff; border-radius: 5px; padding: 10px 10px 10px 10px; box-shadow: 5px 5px 10px 2px#DCDCDC; margin-bottom: 20px; } .tr_css_tra { margin: 10px 10px 10px 10px; /* border: 1px solid red; */ } /* .table_tra { width: 100%; text-align: center; margin-top: 50px; position: relative; margin: 0 auto; } */ .content_tra { color: #045ce4; } .table_css_tra{ width: 100%; text-align: center; margin-top: 50px; position: relative; margin: 0 auto; } </style> ```
我想问个问题,我如何在angular使用websocket的同时使用路由代理
这是我service的代码 ``` import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class WebsocketService { public ws: WebSocket;//定义websocket connectWs(websocket: string) { if (this.ws != null) { this.ws.close() }; this.ws = new WebSocket(websocket); let that = this; this.ws.onopen = function (event) { //socket 开启后执行,可以向后端传递信息 setTimeout(()=> { that.ws.send('sonmething'); },10000); } this.ws.onmessage = function (event) { //socket 获取后端传递到前端的信息 //接收到消息会打开 let indexButton: HTMLElement = document.querySelector('.open') as HTMLElement; indexButton.click(); } this.ws.onerror = function (event) { //socket error信息 } this.ws.onclose = function (event) { //socket 关闭后执行 } } } ```
求助,很简单的C#问题
老师要求做一个成绩管理系统,要求实现分类登入,可是这个cheng'xu如果用户是学生,即使comboBox不选学生也能顺利登入,admin就没这个问题,请教大佬是为什么? private void button1_Click(object sender, EventArgs e) { string sUser = txtUser.Text.ToString(); string sPassword = txtPassword.Text.ToString(); if (sUser == "admin" && sPassword == "1234" && comboBoxLeixing.Text == "管理员") { Menuadmin main = new Menuadmin(); main.Show(); this.Hide(); } if (sUser == "徐光睿" || sUser == "曹广" || sUser == "曹子岳" || sUser == "陈思佳" || sUser == "陈旭" || sUser == "黄文广" || sUser == "雷章树" || sUser == "刘晴晴" || sUser == "齐世勐" || sUser == "沈彬" || sUser == "帅兴" || sUser == "孙权伟" || sUser == "王恒" || sUser == "王瑞" || sUser == "向猛" || sUser == "张国梁" || sUser == "张宗友" || sUser == "张舒敏" && sPassword == "1234" && comboBoxLeixing.Text == "学生") { Menustudent main = new Menustudent(); main.Show(); this.Hide(); } if (sUser == "刘兆良" || sUser == "龙隆" || sUser == "冯伟" || sUser == "刘善勇" || sUser == "印森林" || sUser == "程乐利" || sUser == "刘岩" || sUser == "赵俊威" && sPassword == "1234" && comboBoxLeixing.Text== "教师") { Menuteacher main = new Menuteacher(); main.Show(); this.Hide(); } else label3.Text = "用户名或密码错误,请重新输入!"; }
在spring mvc 中使用@ResponseBody将对象封装为json发送给前端,前端接并提取在页面时候变成了undefined,是不是版本或者什么原因?
spring mvc 中Controller的代码 ``` package cn.sxt.conntroller; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class JsonConntroller { @RequestMapping("/json") @ResponseBody public List<User> json(){ List<User> list = new ArrayList(); list.add(new User("jake", 10, "men")); list.add(new User("nico", 10, "women")); list.add(new User("joker", 10, "men")); return list; } } ``` index.jsp代码 ``` <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Insert title here</title> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript"> $(function(){ $("#b").click(function(){ $.post("json.do",function(data){ var html=""; for(var i = 0;i<data.length;i++){ html+="<tr><td>"+data[i].name+"</td><td>"+data[i].age+"</td><td>"+data[i].sex+"</td></tr>" } $("#content").html(html); }); }); }); </script> </head> <body> <input type="button" id="b" value="获取信息"> <table width="80%" align="center"> <tr> <td>name</td> <td>age</td> <td>sex</td> </tr> <tbody id="content"></tbody> </table> </body> </html> ``` 在浏览器上面的展示图 ![图片说明](https://img-ask.csdn.net/upload/202001/13/1578907341_150073.png) 导入的jar包和jswen'jian jackson-annotations-2.9.9.jar jackson-core-2.9.9.jar jackson-databind-2.9.9.jar jquery-3.4.1.min.js
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问

相似问题

1
求助一下QT与Javascript间调用函数的问题
1
C#winfrom中button按钮的使用问题
1
C# webbrowser控件 InvokeMember("click")无效
3
求助,C# winform实现socket接收客户端数据,总是丢数据。
5
为button对象添加点击事件的两种方法中,为什么一个使用onclick,而另一个却使用click呢?
0
turtle.click()鼠标点击的是一个坐标点,很难点到,怎么将点击的范围扩大
2
点击按钮,如何切换pictureBox的背景图片
1
Vue点击事件无效:Invalid handler for event "click": got undefined
1
移动端的click()不触发,网上的各种方法都试过了还是不行,求大神解决
1
asp.net的网站部署到iis后button失效,请问如何解决?
1
selenium中什么时候用form的submit()什么时候用表单中提交按钮的click()
2
急!!关于element-ui table 如何用按钮控制 使table的展开行 全部打开和隐藏?
5
jquery click事件,点击(不松鼠标)并拖动到区域外之后,无法触发click事件,求解决?
1
web程序两个function方法分别绑定了两个按钮的onclick事件;A-a,B-b绑定,运行的结果确是:A-b??
1
html2canvas+Canvas2Image在移动端出现的问题
1
layui的分页+模糊查询
5
vue+element 怎么实现表格的每行的某一列能点击?
0
小白求教 点击父页面的一个按钮 怎么触发iframe里的方法
1
下面用javascript实现的缓冲运动效果,是否存在让运动物体越过目标位置的bug?
0
layui弹出层按钮回调不生效