input限制输入框值大小

如标题所述:Jquery怎么现在input type="text" 输入框的值,比如限制最大不能超过10,那么这个框最大只能输入10,输入大于10的默认为10

10个回答

html不是有一个maxlength么?可以不用jquery做到。
仅供参考:

 <input class="form-control required" type="text" placeholder="Username" name="username" autofocus="autofocus" maxlength="20"/>
qq_19558705
ITDragon龙 回复x_jax: 这就是值的长度。
大约 4 年之前 回复
x_jax
人间精品 maxlength是控制输入框的长度吧,我想控制的是输入框的值value
大约 4 年之前 回复
qq_19558705
ITDragon龙 回复Roy_Xiong: 那是我项目里面的一句话,直接copy。不好意思让你误会了。
大约 4 年之前 回复
a764340703
Roy_Xiong 回复ITDragon龙: maxlength等于10
大约 4 年之前 回复

在input 的 onchange 属性里用JavaScript判断长度是否超出范围,如果超出了就自动只截取范围内的数据,此办法虽可行,但却不是很人性化,因为在输入的时候没有限制最大长度,用户在不知情的情况下输入了一大串的字符,可当他焦点移走的时候却只截取了前面的一部分,如果我是用户,我也会用的很不爽。所以,这个方法也只是下下策。

maxlength。或者用js判断

可以利用html的maxlength 或者用jq给input绑定一个失去焦点的验证事件

onafterpaste="this.value=this.value.replace(/\D/g,'')" maxlength="10"

/**

  • 限制正副標題字節數 / function limitByte(obj){ var len = obj.value.replace(/[^\x00-\xff]/g, "*").length; if(len > 28){ alert("请輸入小於等於28个字節的字符,當前輸入長度為"+len+",已超出限制"+(len-28)+"個字符!"); obj.focus(); //加上这句 } }

输入框处

使用正则表达式,限制字节数

/**

限制正副標題字節數 / function limitByte(obj){ var len = obj.value.replace(/[^\x00-\xff]/g, "*").length; if(len > 28){ alert("请輸入小於等於28个字節的字符,當前輸入長度為"+len+",已超出限制"+(len-28)+"個字符!"); obj.focus(); //加上这句 } }
输入框处

使用正则表达式,限制字节数

function limitByte(obj){ var len = obj.value.replace(/[^\x00-\xff]/g, "*").length; if(len > 28){ alert("请輸入小於等於28个字節的字符,當前輸入長度為"+len+",已超出限制"+(len-28)+"個字符!"); obj.focus(); } }
输入框处
onblur="limitByte(this);"
使用正则表达式,限制字节数

html的maxlength属性就是控制输入框能输入多少个字符串用的,如果是textarea那就需要使用js来控制了,添加keydown事件判断value长度,超过就不允许继续输入

 <input type="text" maxlength="10" />
<textarea onkeydown="if (this.value.length >= 10)return false;"></textarea>
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
springmvc使用 uploadify3.2 传值
取到得值为null jsp页面 ``` <script type="text/javascript"> $(function(){ $("#uploadify").uploadify({ 'debug' : false, //开启调试 'auto' : false, //是否自动上传 'swf' : 'uploadify/uploadify.swf', //引入uploadify.swf 'uploader' : '../upload/upload',//请求路径 后台处理程序的相对路径 处理上传文件的服务类 'queueID' : 'fileQueue',//队列id,用来展示上传进度的 'width' : '105', //按钮宽度 'height' : '30', //按钮高度 'queueSizeLimit' : 10, //同时上传文件的个数 'fileTypeDesc' : '可选文件类型', //可选择文件类型说明 'fileTypeExts' : '*.jpg;*.gif;*.txt', //控制可上传文件的扩展名 'multi' : true, //允许多文件上传 'buttonText' : '点击文件上传',//按钮上的文字 'fileSizeLimit' : '100MB', //设置单个文件大小限制 'fileObjName' : 'uploadify', //<input type="file"/>的name 'method' : 'post', 'removeCompleted' : true,//上传完成后自动删除队列 'onFallback':function(){ alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。"); }, 'onUploadStart' : function(file) { $("#file_upload").uploadify("settings", "formData", { 'attribute': attribute }); //在onUploadStart事件中,也就是上传之前,把参数写好传递到后台。 }, 'onUploadSuccess' : function(file, data, response){//单个文件上传成功触发 //data就是action中返回来的数据 },'onQueueComplete' : function(){//所有文件上传完成 alert("文件上传成功!"); } }); }); </script> 文本输入框: <input type="text" id="attribute" name="attribute"/> ``` 后台接收: ``` String attribute=request.getParameter("attribute"); ```
html 字体标签 列表 表格 表单
一、字体标签 1、字体标签使用<font color="" face="" size="">...</font>表示 color属性:表示字体颜色 取值:英文 red blue yellow green black pink white 十六进制 #开头 前两位控制红色 中间两位控制绿色 后两位控制蓝色 #00 00 00 十六进制的取值0-F face属性:字体格式 比如:宋体、微软雅黑 size属性:字体大小 取值:1-7 可以为负数,为负数字字体会变小,超出7以最大值为准 默认为3 (官方取值1-7,无特殊情况,不要使用负数) 加粗字:<b>...</b>标签中的内容字体会加粗 斜体字:<i>...</i>标签中的内容字体会倾斜 下划线字:<u>...</u>标签中的内容字体会有下划线 二、列表 1、有序列表 order list <ol></ol>表示有序列表 <li></li> list item 列表元素 <ol type="1|A|a|I|i"> <li></li> </ol> type属性取值: 1 阿拉伯数字 默认 A 大写的英文字母 a 小写的英文字母 I 大写的罗马数字 i 小写的罗马数字 2、无序列表 unordered list <ul></ul>表示无序列表 <li></li> list item 列表元素 <ul type="disc|circle|square|none"> <li></li> </ul> type属性取值:disc 实心圆 默认 circle 空心圆 square 实心方块 none 不修饰 一级默认实心圆 二级默认空心圆 三级默认实心方块 3、自定义列表 definition list <dl></dl> 自定义列表 <dt></dt> 自定义标题 definition title <dd></dd> 自定义描述 definition description <dl> <dt>...</dt> <dd></dd> </dl> 三、表格 <table> <tr> <td>...</td> </tr> </table> table标签:代表表格 tr标签:代表一行 注:只有单元格才能放东西,其他的不能放任何元素 thead标签:表格的头部 tbody标签:表格的内容 tfoot标签:表格的尾部 caption标签:表格的标题 boder属性:表格的边框 width属性:宽度 height属性:高度 align属性:对齐方式,取值:左、中、右 cellspacing属性:单元格与单元格之间的间隙 外边距 cellpadding属性:单元格与内容之间的间隙 内边距 bgcolor属性:表格背景颜色 colspan属性:列合并 rowspan属性:行合并 四、表单 表单:把客户端页面数据提交给服务器端<form></form> 格式:<form action="" method="" type=""> <input /> </form> form:表单标签 action属性:提交到服务器端的地址 method属性:提交方式,取值:get 默认 post input标签:表单元素 type属性:定义表单中的元素类型,取值如下: text 文本输入框 默认 password 密码框 radio 单选框 必须每个单选框name属性相同 chackbox 复选框 必须每个复选框name属性相同 submit 提交按钮 会提交表单 reset 重置按钮 会重置表单 button 普通按钮 image 图片按钮 会提交表单 hidden 隐藏域 file 文件上传 name属性:元素的名称 服务器端是通过name属性获取input框的值 value属性:元素的值 readonly属性:只读 会传输到服务器 disabled属性:禁用 不会传输到服务器 maxlength属性:最大输入字符个数 placeholder属性:提示语 checked属性:是否选中 select标签:下拉列表 size属性:显示下拉列表中几个值 multicol标签:可以选中多个选项 option标签:下拉列表中的选项 格式:<select> <option>...</option> </s/elect> textarea标签:文本区域框 rows属性:行数 cols属性:列数 URL与参数用?连接 参数与参数之间用&
C#控制LED灯总算发送是失败
![图片说明](https://img-ask.csdn.net/upload/201504/10/1428636136_992123.png) 主程序 using LedDemo.Common; using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace LedDemo { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void window_loaded(object sender, RoutedEventArgs e) { //定义数组aryPort,遍历数组 //GetPortNames方法,返回当前计算机可以用的端口 ,以数组的方式返回 string[] aryPort = SerialPort.GetPortNames(); foreach(string item in aryPort) { //将数组的项添加到下拉框的列表中 xl.Items.Add(item); } //设置默认的选择项为第一个找的项(端口) xl.SelectedIndex = 0; } /// <summary> /// Send and Save /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void b_Click(object sender, RoutedEventArgs e) { int speed = -1; //定义速度的值为-1; //定义一个布尔型, bool isSuccess = int.TryParse(sd.Text,out speed); //判断速度值得大小,是否在规定的范围内 if (isSuccess == false ||(speed <0 || speed>7)) { //弹出的对话框,提示信息; MessageBox.Show("请输入正确的值!(0--7)"); return; } LedCtrl led = new LedCtrl(xl.Text, speed); string msg = led.SendSaveMsg(sr.Text); MessageBox.Show(msg); } /// <summary> /// Send No Save /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void nb_Click(object sender, RoutedEventArgs e) { int speed = -1; bool isSuccess = int.TryParse(sd.Text, out speed); if (isSuccess == false || (speed <0 || speed >7)) { MessageBox.Show("请输入正确的值! (0--7) "); return; } LedCtrl led = new LedCtrl(xl.Text,speed); string msg = led.SendMsg(sr.Text); MessageBox.Show(msg); } } } 类包 using ICS.Acquisition; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LedDemo.Common { public class LedCtrl { ICS.Acquisition.LEDAnalysis led = null; ICS.Acquisition.LedMessage ledMode = new ICS.Acquisition.LedMessage(); public LedCtrl(string serialNumber, int speed) { ICS.Models.Com.ComSettingModel com = new ICS.Models.Com.ComSettingModel(); com.LedCom = serialNumber; led = ClassFactory.GetProvider(equipmentCategory.LEDAnalysis, com) as LEDAnalysis; ledMode.HardwareAddress = "01"; ledMode.PlayerModel = "01"; ledMode.StopTime = "00"; ledMode.ColorType = "00"; //数据有效时间 范围0--99 ledMode.EffectiveTime = "00"; ledMode.Speed = speed.ToString(); } /// <summary> /// 发送并保存 /// </summary> /// <param name="msg"></param> /// <returns></returns> public string SendSaveMsg(string msg) { ledMode.Context = msg; if (led.SetSaveLedMessage(ledMode)) { return "发送成功"; } else { return "发送失败"; } } public string SendMsg(string msg) { ledMode.Context = msg; if (led.SetLedMessage(ledMode)) { return "发送成功"; } else { return "发送失败"; } } } }
bootstraptable-edit使用问题
![图片说明](https://img-ask.csdn.net/upload/201908/06/1565077495_685813.png) 外部的表格无法获取数据,检查contentType属性配置问题。 ``` $(function() { //初始化Table var oTable = new TableInit(); oTable.Init(); }); var TableInit = function() { var oTableInit = new Object(); //初始化Table oTableInit.Init = function() { $('#table').bootstrapTable({ url : 'list',//请求后台的URL(*) method : 'post',//请求方式(*) toolbar : '#toolbar',//工具按钮用哪个容器 striped : true,//是否显示行间隔色 cache : false,//是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*) pagination : true,//是否显示分页(*) sortable : false,//是否启用排序 sortOrder : "asc",//排序方式 queryParams : oTableInit.queryParams,//传递参数(*) sidePagination : "server",//分页方式:client客户端分页,server服务端分页(*) pageNumber : 1,//初始化加载第一页,默认第一页 pageSize : 10,//每页的记录行数(*) pageList : [ 10, 25, 50, 100 ],//可供选择的每页的行数(*) search : true,//是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大 contentType : "application/x-www-form-urlencoded", strictSearch : true, showColumns : true,//是否显示所有的列 showRefresh : true,//是否显示刷新按钮 minimumCountColumns : 2,//最少允许的列数 clickToSelect : true,//是否启用点击选中行 height : 700,//行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度 uniqueId : "id",//每一行的唯一标识,一般为主键列 showToggle : true,//是否显示详细视图和列表视图的切换按钮 cardView : false,//是否显示详细视图 detailView : false,//是否显示父子表 columns : [ { field : 'id', title : '编号' }, { field : 'name', title : '名字' }, { field : 'price', title : '价格' }, { field : 'operate', title : '操作', formatter : operateFormatter //自定义方法,添加操作按钮 }, ], rowStyle : function(row, index) { var classesArr = [ 'white', 'lightblue' ]; var strclass = ""; if (index % 2 === 0) {//偶数行 strclass = classesArr[0]; } else {//奇数行 strclass = classesArr[1]; } return { classes : strclass }; },//隔行变色 }); }; //得到查询的参数 oTableInit.queryParams = function(params) { var temp = {//这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的 limit : params.limit,//页面大小 //pageNumber: params.pageNumber,//页码 offset : params.offset }; return temp; }; return oTableInit; }; function operateFormatter(value, row, index) {//赋予的参数 return [ '<a href="#" style="color:blue;" οnclick="edit(' + row.id + ')">编辑</a>|', '<a href="#" style="color:red;" οnclick="del(' + row.id + ')">删除</a>', ].join(''); } ``` table-edit.js ``` (function($){ 'use strict'; $.extend($.fn.bootstrapTable.defaults, { editable: false }); var BootstrapTable = $.fn.bootstrapTable.Constructor, _init = BootstrapTable.prototype.init, _initBody = BootstrapTable.prototype.initBody, _onSort = BootstrapTable.prototype.onSort, _append = BootstrapTable.prototype.append, _initHeader = BootstrapTable.prototype.initHeader ; //添加编辑表格默认属性,如何edit设置为false时,表示该列不可编辑 $.extend(true,BootstrapTable.COLUMN_DEFAULTS,{ edit:{ type:'text'//目前只支持 文本:text 下拉:select 日期:date } }); BootstrapTable.prototype.init = function () { _init.apply(this, Array.prototype.slice.apply(arguments)); var that = this; that.prevEditRow = null;//上一次编辑的行 that.columns = {};//列配置信息 that.insertRowVal = {};//新插入行的默认值 that.enableAppend = true;//允许添加新行 if (that.options.editable) { var columnObj = this['getColumns'](); $.each(columnObj,function(i,obj){ $.each(obj,function(z,col){ if(!isNaN(col.fieldIndex) && col.fieldIndex >= 0){ if(col.checkbox)col.edit = false; that.columns['column'+col.fieldIndex] = col; that.insertRowVal[col.field] = ''; } }); }); //this.initEdit(); } }; /*BootstrapTable.prototype.initHeader = function(){ _initHeader.apply(this, Array.prototype.slice.apply(arguments)); this.$container.find('.fixed-table-header').addClass('success'); };*/ BootstrapTable.prototype.initBody = function () { var that = this; _initBody.apply(this, Array.prototype.slice.apply(arguments)); if (!that.options.editable) return; this.initEdit(); //如果列是下拉框,则转换值为对应的文本 $.each(that.columns,function(indx,col){ if(col.edit && col.edit.type == 'select'){ col.edit = $.extend({},$.fn.bootstrapSelect.defaults,col.edit); if(col.edit.data.length > 0){ that.$body.find('>tr').each(function(){ if(that.getData().length < 1)return true; var rowData = that.data[$(this).data('index')];//当前点击td所在行的数据 var $td = $(this).find('td').eq(col.fieldIndex); $.each(col.edit.data,function(i,data){ if(data[col.edit.valueField] == rowData[col.field]){ $td.html(data[col.edit.textField]); } }); }); } else if(col.edit.url){ $.ajax({ url:col.edit.url, type:'post', data:col.edit.paramsType == 'json' ? JSON.stringify(col.edit.params) : col.edit.params, dataType:'json', success: function(jsonLst) { col.edit.onLoadSuccess.call(this,jsonLst); that.$body.find('>tr').each(function(){ if(that.getData().length < 1)return true; var rowData = that.data[$(this).data('index')];//当前点击td所在行的数据 var $td = $(this).find('td').eq(col.fieldIndex); $.each(jsonLst,function(i,data){ if(data[col.edit.valueField] == rowData[col.field]){ $td.html(data[col.edit.textField]); } }); }); col.edit.data = jsonLst; col.edit.url = null; }, error: function(xhr, textStatus, errorThrown){ col.edit.onLoadError.call(this); col.edit.data = []; col.edit.url = null; throw col.field+' 列下拉框数据加载失败'; } }); } } }); }; //根据行号删除指定行 BootstrapTable.prototype.removeRow = function (rowNum) { var that = this; var len = that.options.data.length; if (isNaN(rowNum)){ return; } if(that.$body.find('.editable-select').data('index') != rowNum){ recover(that); } //删除数据 that.options.data.splice(rowNum,1); if (len === that.options.data.length){ return; } var oldClass = {};//保存被标记修改的样式 that.$body.find('>tr').each(function(indx){ if($(this).hasClass('editable-modify')){ if(indx > rowNum){ oldClass[indx-1] = 'editable-modify'; } else{ oldClass[indx] = 'editable-modify'; } } }); //this.prevEditRow = null; //this.$body.find('>tr').removeClass('editable-select'); that.initBody(); //将标记改变过行的样式从新设置回去 for(var key in oldClass){ that.$body.find('>tr').eq(key).addClass(oldClass[key]); } //this.initEdit(); //没有数据时给提示加上样式 if(that.getData().length < 1){ that.$body.find('>tr').addClass('no-records-found'); } }; BootstrapTable.prototype.append = function (){ var that = this; //if(!that.enableAppend)return; var oldClass = {};//保存被标记修改的样式 that.$body.find('>tr').each(function(indx){ if($(this).hasClass('editable-modify') || $(this).hasClass('editable-insert')){ oldClass[indx] = 'editable-modify'; } }); arguments[0] = $.extend({},that.insertRowVal,arguments[0]); _append.apply(this,Array.prototype.slice.apply(arguments)); if (that.options.editable){ //that.initEdit(); setTimeout(function (){ //将标记改变过行的样式从新设置回去 for(var key in oldClass){ that.$body.find('>tr').eq(key).addClass(oldClass[key]); } that.$body.find('>tr:last').addClass('editable-modify'); that.$body.find('>tr:last').addClass('editable-insert');//双重保险,防止在快速点击添加时,为给新增行设置editable-modify属性 that.$body.find('>tr:last').click(); },60); } }; BootstrapTable.prototype.onSort = function () { _onSort.apply(this, Array.prototype.slice.apply(arguments)); var that = this; if (that.options.editable) { this.initEdit(); } }; BootstrapTable.prototype.getData = function () { return (this.searchText || this.searchCallback) ? this.data : this.options.data; }; BootstrapTable.prototype.getColumns = function () { return this.options.columns; }; /** * 获取有被修改过行的值 */ BootstrapTable.prototype.getModiDatas = function (){ var that = this; var datas = []; that.$body.find('.editable-modify').each(function(){ if(that.data[$(this).data('index')]){ datas.push(that.data[$(this).data('index')]); } }); return datas; }; /** * 获取指定列的和,参数为列下标 */ BootstrapTable.prototype.getColTotal = function (num){ var retVal = 0; this.$body.find('>tr').each(function(){ var colNum = 0; if($(this).hasClass('editable-select')){ colNum = $(this).find('td').eq(num).find('input').val(); } else{ colNum = $(this).find('td').eq(num).html(); } if(!isNaN(colNum)){//是数字才做想加 retVal += Number(colNum); } }); return retVal; }; /** * 创建可编辑表格 */ BootstrapTable.prototype.initEdit = function(){ var that = this, data = this.getData(); //this.$body.find('> tr').unbind('click').on('click' //this.$body.delegate('>tr','click' this.$body.find('> tr').unbind('click').on('click',function(){ var $tr = $(this); if($tr.hasClass('editable-select') || data.length < 1 || $tr.hasClass('no-records-found')){ return; } $tr.removeClass('no-records-found'); recover(that); that.prevEditRow = $tr; $tr.addClass('editable-select');//给当前编辑行添加样式,目前样式为空只做标识使用 that.$body.find('> tr').not(this).removeClass('editable-select'); $tr.find('td').closest('td').siblings().html(function(i,html){ initTrClick(that,this); }); }); //鼠标点击事件 $(document).bind('mousedown',function(event){ var $target = $(event.target); if(!($target.parents().andSelf().is(that.$body)) && !($target.parents().andSelf().is($('.datetimepicker')))){ setTimeout(function () { recover(that); //that.prevEditRow = null; //that.$body.find('> tr').removeClass('editable-select'); },10); }; }); }; $.fn.bootstrapTable.methods.push('getColumns', 'getModiDatas','removeRow','getColTotal'); /** * 给tr添加点击事件 */ function initTrClick(that,_this){ that.enableAppend = true; var $td = $(_this); var $tr = $td.parent(); var rowData = that.data[$tr.data('index')];//当前点击td所在行的数据 var tdIndex = $tr.children().index($td);//当前点击的td下标 var tdOpt = that.columns['column'+tdIndex]; if(!tdOpt.edit || typeof tdOpt.edit != 'object'){ return ; } $td.data('field',tdOpt.field); if(!$td.data('oldVal')){ $td.data('oldVal',$.trim(rowData[tdOpt.field])); } var height = $td.innerHeight() - 3; var width = $td.innerWidth() - 2; $td.data('style',$td.attr('style'));//保存原来的样式 $td.attr('style','margin:0px;padding:1px!important;'); var placeholder = ''; if(tdOpt.edit.required == true){ placeholder = '必填项'; } var value = rowData[tdOpt.field] == null || rowData[tdOpt.field] == ''?'':rowData[tdOpt.field]; $td.html('<div style="margin:0;padding:0;overflow:hidden;border:solid 0px red;height:'+(height)+'px;width:'+(width)+'px;">' +'<input type="text" placeholder="'+placeholder+'" value="'+value+'" style="margin-left: 0px; margin-right: 0px; padding-top: 1px; padding-bottom: 1px; width:100%;height:100%">' +'</div>'); $td.width(width); var $input = $td.find('input'); if(!tdOpt.edit.type || tdOpt.edit.type == 'text'){ if(tdOpt.edit['click'] && typeof tdOpt.edit['click'] === 'function'){ $input.unbind('click').bind('click',function(event){ tdOpt.edit['click'].call(this,event); }); } if(tdOpt.edit['focus'] && typeof tdOpt.edit['focus'] === 'function'){ $input.unbind('focus').bind('focus',function(event){ tdOpt.edit['focus'].call(this,event); }); } $input.unbind('blur').on('blur',function(event){ if(tdOpt.edit['blur'] && typeof tdOpt.edit['blur'] === 'function'){ tdOpt.edit['blur'].call(this,event); } }); } else if(tdOpt.edit.type == 'select'){ $input.bootstrapSelect(tdOpt.edit); } else if(tdOpt.edit.type == 'date'){ $td.html('<div style="margin:0;padding:0;overflow:hidden;border:solid 0px red;height:'+(height)+'px;width:'+(width)+'px;" class="input-group date form_datetime" data-link-field="dtp_editable_input">' +'<input class="form-control" type="text" value="'+value+'">' +'<span class="input-group-addon"><span class="glyphicon glyphicon-th"></span></span>' +'</div>' +'<input type="hidden" id="dtp_editable_input" value="'+value+'"/>' ); that.$body.find('.form_datetime').datetimepicker({ weekStart: 1, todayBtn: 1, autoclose: 1, todayHighlight: 1, startView: 2, forceParse: 0, language:'zh-CN', format: 'yyyy-mm-dd hh:ii:ss', pickerPosition: 'bottom-left', showMeridian: 1 }); } } /** * 恢复tr,使之处于不可编辑状态 */ function recover(that){ var isModi = false;//判断行值是否变动过 if(that.prevEditRow != null){ that.prevEditRow.find('td').closest('td').siblings().html(function(i,html){ $(this).attr('style',$(this).data('style')); var textVal = $(this).find('input[type="text"]').val(); var hiddenVal = $(this).find('input[type="hidden"]').val(); if(typeof $(this).find('input[type="text"]').bootstrapSelect('getText') != 'object'){ $(this).find('input[type="text"]').bootstrapSelect('destroy'); } if(textVal != undefined){ if($(this).data('oldVal') != (hiddenVal?hiddenVal:$.trim(textVal)) && $(this).data('field')) { that.data[that.prevEditRow.data('index')][$(this).data('field')] = hiddenVal?hiddenVal:$.trim(textVal); isModi = true; } if(that.columns['column'+i].edit.required == true){ if(textVal == null || textVal == ''){ that.enableAppend = false; return '<span style="color:red;">必填项不能为空</span>'; } } return $.trim(textVal); } }); //新值跟旧值不匹配证明被改过 if(isModi || that.prevEditRow.hasClass('editable-insert')){ that.prevEditRow.addClass('editable-modify'); } else{ that.prevEditRow.removeClass('editable-modify'); } that.prevEditRow = null; that.$body.find('> tr').removeClass('editable-select'); } } })(jQuery); ``` 哪位大神能帮忙解决下
php+mvc模式的登陆口验证码可以点击刷新,不会自动刷新,求大神解决
1:描述问题:网站首页登陆口不管如何刷新[F5],验证码都不会变。但是点击验证码的话可以变为新的验证码!而且我们使用验证码登陆成功后同时退出来,此时登陆口的验证码还是之前使用过的验证码,没有更新!请大神帮我解决下,贴出正确的代码!因为本人不是很懂,只会照葫芦画瓢!万分感谢!无解决方案的请别回复了谢谢! 文件名:PassportController 代码如下,这个应该是控制器 /* 生成验证码 */ public function verify() { $config = [ 'fontSize' => 19, // 验证码字体大小 'length' => 4, // 验证码位数 'imageH' => 34 ]; $Verify = new Verify($config); $Verify->entry(); } /* 验证码校验 */ public function check_verify($code, $id = '') { $verify = new \Think\Verify(); $res = $verify->check($code, $id); $this->ajaxReturn($res, 'json'); } public function accessRules() { return array( array('allow', // 允许所有用户访问 'login' 动作. 'users'=>array('*'), ), array('allow', // 允许认证用户访问所有动作 'users'=>array('@'), ), array('deny', // 拒绝所有的用户。 'users'=>array('*'), ), ); } /* 异地登录检测 */ public function actionPlaceOtherLogin() { if(isset($_POST['username']) && $_POST['username']!="" && isset($_POST['pwd']) && $_POST['pwd']) { $siteLogin=new SiteLoginForm; $siteLogin->username=$_POST['username']; $siteLogin->password=$_POST['pwd']; $siteLogin->verifyCode=$_POST['verifyCode']; $siteLogin->rememberMe=false; if($siteLogin->validate())//用户名密码正确 { $userinfo=User::model()->findByAttributes(array( 'Username'=>$_POST['username'], 'PassWord'=>md5($_POST['pwd']) )); if($userinfo->Status==0)//用户帐号没有被冻结,处于正常状态 { if($userinfo->PlaceOtherLogin==0)//用户没有开启异地登录,则允许用户直接提交登录 { echo "true"; }else//开启异地登录 { //1.检查此次登录的ip与最近一次登录的ip是否相同 $lastLoginLog=Loginlog::model()->find(array( 'condition'=>'userid='.$userinfo->id, 'order'=>'id desc' )); if($lastLoginLog->loginip===XUtils::getClientIP())//如果本次登录ip与最近一次登录ip相同则允许用户直接提交 { echo "true"; }else//如果不同则返回通知使用短信验证 { echo $userinfo->Phon;//需要手机接手短信验证码,返回手机号码,以便发送短信进行验证 } } }else//帐号被冻结 { echo "LOCK"; } }else { echo "FAIL"; } } } // 登陆口的文件名:index 代码如下 // <link rel="stylesheet" type="text/css" href="<?php echo VERSION2;?>2_files/index.css"> <div class="banNer"><!--首页幻灯--> <ul class="rslides" id="slider"> <li style="background: url(<?php echo VERSION2;?>img/banner/banner_tg.jpg) no-repeat center top;"> <li style="background: url(<?php echo VERSION2;?>img/banner/003.jpg) no-repeat center top;"> </li> </ul> <!--登录区域--> <div class="login_frame_bg" <?php if(Yii::app()->user->getId())echo 'style="display:none;"';?>> <div class="login_frame"> <span class="warningSpan"<?php if(isset($_GET['loginStatus']) && $_GET['loginStatus']=='fail') echo 'style="display:block;"';?>>用户名或密码错误</span> <div id="myForm"> <table> <form method="post" onsubmit="return checkLogin()" action="<?php echo $this->createUrl('passport/login');?>"> <tbody> <tr> <td> <div class="login_mailbox"> <input type="hidden" name="User[position]" value="index" /> <input id="lusername" type="text" name="User[Username]" autocomplete="off" placeholder="用户名"> </div> </td> </tr> <tr> <td> <p class="zq" id="miaoname" style="margin:-15px 0px 10px;"></p> </td> </tr> <tr> <td> <div class="login_ps"> <input id="lpassword" type="password" name="User[PassWord]" name="LoginForm[password]" placeholder="请输入密码"> </div> </td> </tr> <tr> <td> <table> <tr> <td> <input type="text" name="User[VerifyCode]" class="" placeholder="请输入右边验证码" style=" width: 170px; margin-right: 5px; border-radius: 5px; line-height: 35px; border: 1px solid #fff; padding-left: 5px;" id="verifyCode" /> </td> <td> <?php $this->widget( 'CCaptcha', array('showRefreshButton'=>false, 'clickableImage'=>true, 'imageOptions'=>array( 'alt'=>'点击换图', 'title'=>'点击换图', 'style'=>'cursor:pointer; background:#fff; height:27px; border-radius:5px;' ) ) ); ?> </td> </tr> </table> </td> </tr> <tr> <td> <p class="zq" style="height: 10px;"></p> </td> </tr> <tr> <td> <p id="miaopwd" class="zq" style="margin:-15px 0px 10px;"></p> </td> </tr> <tr> <td> <li style=" color:#fff; font-size:12px;"><input name="User[rememberMe]" type="checkbox" style="position: relative; top: 3px; width:12px;" /> 下次自动登录<a href="javascript:;" class="forgetPwd" style=" float:right; margin-right:28px; color:white;">忘记密码?</a></li><br /> </td> </tr> <tr> <td> <button class="login-btn" id="login_btn">登录</button> </td> </tr> <tr> <td> <span><a href="<?php echo $this->createUrl('passport/regist');?>" id="a">还没有账号?点击注册>></a></span> </td> </tr> </tbody> <form> </table> </div> </div> </div> <div class="indIntr" style="background="achose.png" ><!--系统优势--> <div class="why_main4 clearfix"> </div> </div> <script> //登录表单检测 function checkLogin() { if($("#lusername").val()=="") { layer.tips('用户名不能为空', '#lusername'); return false; }else if($("#lpassword").val()=="") { layer.tips('密码不能为空', '#lpassword'); return false; }else if($("#verifyCode").val()=="") { layer.tips('验证码不能为空', '#verifyCode'); return false; }else { var submitStatus=0;//提交状态初始化verifyCode var phone=0;//手机号码初始化 //检查是否开启异地登录 $.ajax({ type:"POST", url:"<?php echo $this->createUrl('passport/placeOtherLogin');?>", data:{ "username":$("#lusername").val(), "pwd":$("#lpassword").val(), "verifyCode":$("#verifyCode").val(), }, async:false, success:function(msg) { if(msg=="true")//不用检测 { submitStatus=1; }else if(msg=="FAIL")//用户名或密码不正确 { } else if(msg=="LOCK")//用户帐户被冻结 { submitStatus=3; }else//需要发送手机验证码 { phone=msg;//赋值用户手机号 submitStatus=2; } } }); /*alert(submitStatus); exit;*/ //检查是否开启异地登录 if(submitStatus==0)//用户名密码不正确 { layer.tips('用户名,密码或验证码不正确', '#lusername', { tips: [1, '#0FA6D8'] //还可配置颜色 }); return false; }else if(submitStatus==3) { //询问框 layer.confirm('<span style="color:red;">您的帐户已被冻结,如有需要请联系客服人员</span>', { btn: ['知道了'] //按钮 }); return false; }else if(submitStatus==1)//直接提交 { return true; }else//2表示需要发送短信验证码 { //发送验证码 $.ajax({ type:"POST", url:"<?php echo $this->createUrl('site/sms');?>", data:{"phone":phone,"phoneCode":"DONE"}, async:false, success:function(msgCode) { if(msgCode=="SUCCESS") { //询问框 layer.confirm('<span style="color:red;">短信发送成功(异地登录请输入手机验证码)</span><br/>验证码<input class="text1 phoneCodeVal" name="phoneCodeVal" />', { btn: ['确定提交'] //按钮 },function(){ if($(".phoneCodeVal").val()=="")//验证码不为空 { layer.tips('验证码不能为空', '.phoneCodeVal'); }else{ //发送手机号与验证码去验证正确性 $.ajax({ type:"POST", url:"<?php echo $this->createUrl('passport/userCheckPhoneAndCode');?>", data:{"phone":phone,"phoneCode":$(".phoneCodeVal").val()}, async:false, success:function(msgCertain) { if(msgCertain=="SUCCESS")//手机验证码检测通过 { //验证通过直接进行提交登录 $.ajax({ type:"POST", url:"<?php echo $this->createUrl('passport/codePassLogin');?>", data:{"username":$("#lusername").val(),"pwd":$("#lpassword").val()}, async:false, success:function(msglogin) { if(msglogin=="SUCCESS")//登录成功刷新当前页面 { location.reload(); //询问框 }else//登录异常刷新当前页面 { layer.confirm('<span style="color:red;">登录异常</span>,您可以联系客服人员', { btn: ['知道了'] //按钮 }); } } }); //验证通过直接进行提交登录 }else if(msgCertain=="CODEFAIL")//验证不正确 { layer.tips('验证码不正确', '.phoneCodeVal'); }else//手机号异常 { layer.tips('手机号码异常', '.phoneCodeVal'); } } }); //发送手机号与验证码去验证正确性 } }); }else { //询问框 layer.confirm('<span style="color:red;">异地登录验证-短信发送失败,可能发送次数过多</span>,您可以联系客服人员', { btn: ['知道了'] //按钮 }); phoneAndCodeCheckStatus=0; } } }); //发送短信验证码结束 return false; } } } //忘记密码 $(".forgetPwd").click(function(){ layer.open({ type: 2, title:'找回密码', area: ['375px','270px'], skin: 'layui-layer-rim', //加上边框 content: ['<?php echo $this->createUrl('passport/forgetPwd');?>', 'no'] }); }); </script> // 能帮我解决问题的才回复,或者还需要我提供什么的请留言,谢谢了,
js jsp 向servlet跳转过程中的request问题
当在html中使用<form enctype="multipart/form-data">时(使用fileupload上传文件),request.getParameter("name")得到的是null,为了避免这一问题,并且为了检验输入框是否为空,通过js向servlet提交。这样值可以传过去了,但是上传图片中解析request的值却为null 现在想要得到即可以检验输入是否为空,又可以得到传值并将图片保存起来的效果。顺便想请教一下 js跳转的servlet的request和action跳转到servlet的request有什么不同。 P.S:请您不要怀疑什么没有进到servlet等类似问题。如果您有更好的解决方案,非常感谢您的告知,我会在一段日子后研究,但现在我的主要问题是使用html、js、servlet这三种技术解决问题。 非常感谢! 代码如下 html: <%@ page contentType="text/html;charset=GBK" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html lang="en"> <head> <title>新增商家</title> </head> <body> <style> body,td{font-size:12px;} </style> <script language=javascript> //验证填入值不为空 function checkEmpty(){ var name = document.getElementById("merchantName").value; var call = document.getElementById("merchantCall").value; var picture = document.getElementById("picture").value; var address = document.getElementById("merchantAdd").value; var validate = document.getElementById("validatetCall").value; if(name==""||call==""||picture==""||address==""||validate==""){ alert("请您填写所需要的信息"); } else{ // 跳转到AddMerchantServlet中 document.merchantForm.action = "/discountCoupon/AddMerchant?name="+name+"&call="+call+"&picture="+picture+"&address="+address+"&verifyCall="+validate ; document.merchantForm.submit(); } } </script> <form name="merchantForm" enctype="multipart/form-data" method="post" > <fieldset style="width: 600; height: 60;padding:2px;" > <table> <tr> <td> <font color="red">*</font> 商家名称: <input type="text" id="merchantName" width="280px" style="height:18px;width:300px" value="请您限制在10个字以内" /> </td> </tr> <tr> <td> <font color="red">*</font> 商家电话: <input type="text" id="merchantCall" maxlength="11" /> </td> </tr> <tr> <td> <font color="red">*</font> 商家海报: <input type="file" id="picture" /> <input type="reset" /> </td></tr> <tr> <td> <font color="red">*</font> 商家地址: <input type="text" id="merchantAdd" style="height:18px;width:300px" /> </td> </tr> <tr> <td> <font color="red">*</font> 验证手机: <input type="text" id="validatetCall" maxlength="11" />&nbsp &nbsp添加 </td> </tr> <tr> <td> <input type="submit" value="保存" name="save" onclick="checkEmpty();" /> </td> <td>&nbsp &nbsp </td> <td> <input type="button" value="取消" name="cancel" onclick="window.close();" /> </td> </tr> </table> </fieldset> </form> </body> </html> servlet package com.ygsoft.servlet; import java.io.BufferedInputStream; public class AddMerchant extends HttpServlet { private static final long serialVersionUID = 1L; File tmpDir = null; File saveDir = null; @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); //从addMerchant.jsp中取得数据 String name = request.getParameter("name"); //对得到的数据进行转码 byte [] bytes1 = name.getBytes("iso-8859-1"); String merchantName = new String(bytes1,"GBK"); String merchantCall = request.getParameter("call"); String merchantPicture = request.getParameter("picture"); //对得到的数据进行转码 byte [] bytes2 = merchantPicture.getBytes("iso-8859-1"); String picture = new String(bytes2,"GBK"); String address = request.getParameter("address"); //对得到的数据进行转码 byte [] bytes3 = address.getBytes("iso-8859-1"); String merchantAdd = new String(bytes3,"GBK"); String validateCall = request.getParameter("verifyCall"); //向数据库中存储数据 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); MerchantDao dao = (MerchantDao) factory.getBean("merchantDao"); Merchant merchant = new Merchant(); MerchantAssistant merchantAssistant = new MerchantAssistant(); HashSet<MerchantAssistant> set = new HashSet<MerchantAssistant>(); merchantAssistant.setVerifyUserPhoneNum(validateCall); merchantAssistant.setActive(1); set.add(merchantAssistant); merchant.setMerchantName(merchantName); merchant.setMerchantAdd(merchantAdd); merchant.setMerchantPhoneNum(merchantCall); merchant.setMerchantPic(picture); merchantAssistant.setMerchant(merchant); merchant.setMerchantAssistantSet(set); dao.addMerchant(merchant); //跳转到商家管理页面 RequestDispatcher rd = request.getRequestDispatcher("/merchantManage"); rd.forward(request, response); } public AddMerchant() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //对图片进行存储 try { if (ServletFileUpload.isMultipartContent(request)) { // 创建该对象 DiskFileItemFactory dff = new DiskFileItemFactory(); // 指定上传文件的临时目录 dff.setRepository(tmpDir); // 指定在内存中缓存数据大小,单位为byte dff.setSizeThreshold(1024000); // 创建该对象 ServletFileUpload sfu = new ServletFileUpload(dff); // 指定上传文件的最大尺寸 sfu.setFileSizeMax(5000000); // 指定依次上传多个文件的总尺寸 sfu.setSizeMax(10000000); // 解析request请求,并返回FileItemIterator集合 FileItemIterator fii = sfu.getItemIterator(request); // 解析request请求,并返回FileItemIterator while (fii.hasNext()) { // 从集合中获得一个文件流 FileItemStream fis = fii.next(); // 过滤表单中空文件域 if ((!fis.isFormField()) && fis.getName().length() > 0) { // 获得的上传文件的文件名 String fileName = fis.getName().substring( fis.getName().lastIndexOf("//") + 1); if (fis.getName().lastIndexOf("//") == -1) { fileName = fis.getName().substring( fis.getName().lastIndexOf("/") + 1); // 获得文件输入流 BufferedInputStream in = new BufferedInputStream( fis.openStream()); // 获得文件输出流 BufferedOutputStream out = new BufferedOutputStream( new FileOutputStream(new File(saveDir, fileName))); // 开始把文件写到你指定的上传文件夹 Streams.copy(in, out, true); } } } } } catch (Exception e) { e.printStackTrace(); } } public void init() throws ServletException { super.init(); String tmpPath = "d://tempdir"; String savePath = "d://savedir"; tmpDir = new File(tmpPath); saveDir = new File(savePath); if (!tmpDir.isDirectory()) tmpDir.mkdir(); if (!saveDir.isDirectory()) saveDir.mkdir(); } }
现在的程序里五子棋下棋是点击方格然后棋子出现在左上角的交叉处,怎样修改能点击交叉处直接下棋子
package wuziqi; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class 五子棋 extends JFrame implements MouseListener,Runnable{ public static void main(String args[]){ 五子棋 ff = new 五子棋(); } int height = Toolkit.getDefaultToolkit().getScreenSize().height; int width = Toolkit.getDefaultToolkit().getScreenSize().width; BufferedImage bgImage = null;//缓存图片 int x = 0; int y = 0; int allChess [][] = new int [19][19];//设置棋盘大小 boolean isBlack = true; boolean canPlay = true; String message = "黑方先行"; int maxTime = 0; Thread t = new Thread(this);//创建一个线程 int blackTime = 0; int whiteTime = 0; String blackMessage = "无限制"; String whiteMessage = "无限制"; public 五子棋(){ this.setTitle("五子棋"); this.setSize(600,600);//设置窗体大小 this.setResizable(true);//窗体是否可改变大小 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//单击窗口的关闭按钮 this.setLocation((width - 500)/2, (height - 500)/2);//离显示屏上下,左右像素 this.addMouseListener(this);//处理鼠标事件 this.setVisible(true); //窗体可视 t.start();//开始线程 //t.suspend(); this.repaint(); try{ bgImage = ImageIO.read(new File("E:/image/bgImage.jpg")); } catch (IOException e){ e.printStackTrace();//运行时自动将io流异常初始化,并打印出程序的异常信息 } } public void paint(Graphics g){ BufferedImage bi = new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB); Graphics g2 = bi.createGraphics(); g2.drawImage(bgImage, 0,0, this);//信息参数 g2.setColor(Color.black); g2.setFont(new Font("黑体",Font.BOLD,25)); g2.drawString("游戏信息: " + message, 20,60); g2.setFont(new Font("宋体",Font.BOLD,20)); g2.setColor(Color.white); g2.fillRect(15, 460,185, 25); g2.fillRect(255, 460,185, 25); g2.setColor(Color.black ); g2.drawString("黑方时间:"+blackMessage, 20,480); g2.drawString("白方时间:"+whiteMessage, 260,480); g2.setColor(Color.yellow); g2.fill3DRect(390, 90, 90, 30,true);//x坐标,y坐标,长,宽,false凹 true凸 g2.fill3DRect(390, 140, 90, 30,true); g2.fill3DRect(390,190, 90, 30,true); g2.fill3DRect(390,240, 90, 30,true); g2.fill3DRect(390,290, 90, 30,true); g2.fill3DRect(390, 340, 90, 30,true); g2.fill3DRect(390, 395, 90, 30,true); g2.setColor(Color.red); g2.drawString("开始游戏", 394, 113);//框体中的内容,x坐标。y坐标 g2.drawString("游戏设置", 394, 163); g2.drawString("游戏说明", 394, 213); g2.drawString("暂停", 412,263); g2.drawString("继续", 412, 313); g2.drawString("认输", 412, 363); g2.drawString("退出", 412, 418); g2.setColor(Color.black); for(int i=0;i<19;i++){ g2.drawLine(10, 70+20*i, 370, 70+20*i); g2.drawLine(10+20*i, 70, 10+20*i, 430);//绘制棋盘,drawLine(x1,y1,x2,y2) } g2.fillOval(66, 126, 8, 8); g2.fillOval(306, 126, 8, 8); g2.fillOval(306, 366, 8, 8); g2.fillOval(66, 366, 8, 8); g2.fillOval(306, 246, 8, 8); g2.fillOval(186, 126, 8, 8); g2.fillOval(66, 246, 8, 8); g2.fillOval(186, 366, 8, 8); g2.fillOval(186, 246, 8, 8);//设置棋盘上的九个星 for(int i=0;i<19;i++){ for(int j=0;j<19;j++){ if(allChess[i][j] == 1){ int tempX = i*20+10; int tempY = j*20+70; g2.fillOval(tempX-8, tempY-8, 16, 16); } if(allChess[i][j] == 2){ int tempX = i*20+10; int tempY = j*20+70; g2.setColor(Color.white); g2.fillOval(tempX-8, tempY-8, 16, 16); g2.setColor(Color.black); g2.drawOval(tempX-8, tempY-8, 16, 16); } } } g.drawImage(bi, 0, 0, this); } public void mouseClicked (MouseEvent e){} public void mouseExited (MouseEvent e){} public void mouseEntered (MouseEvent e){} public void mouseReleased (MouseEvent e){} public void mousePressed (MouseEvent e){ //System.out.println("X坐标:"+e.getX()+" "+"Y坐标"+e.getY()); if(canPlay == true){ x = e.getX(); y = e.getY(); if(x >=10 && x<=370 && y>=70 && y<=430){ x = (x-10)/20; y = (y-70)/20; if(allChess[x][y] == 0){ if(isBlack == true){ allChess[x][y] = 1; isBlack = false; message = "轮到白方"; }else { allChess[x][y] = 2; isBlack = true; message = "轮到黑方"; } boolean winFlag = this.checkWin(); if (winFlag == true){ JOptionPane.showMessageDialog(this, "游戏结束!"+" "+(allChess[x][y]==1? "黑方" :"白方")+"获胜!"); canPlay = false; } }else { JOptionPane.showMessageDialog(this, "当前位置已经有棋子,请重新落子!"); } this.repaint(); } } if(e.getX()>=390 && e.getY()>=70 && e.getX()<=480 && e.getY()<=100){ int result = JOptionPane.showConfirmDialog(this, "是否重新开始游戏?"); if (result == 0){ for (int i =0;i<19;i++){ for (int j =0;j<19;j++){ allChess[i][j] = 0; canPlay = true; } } //allChess = new int[19][19]; message = "黑方先行"; isBlack = true; blackTime = maxTime; whiteTime = maxTime; if(maxTime>0){ blackMessage = maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); whiteMessage = maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); t.resume(); }else{ blackMessage = "无限制"; whiteMessage = "无限制"; } this.repaint(); } } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=120 && e.getY()<=150){ String input = JOptionPane.showInputDialog("请输入游戏的最大时间(分钟),如果输入0,表示没有时间限制:"); try{ maxTime = Integer.parseInt(input)*60; if(maxTime<0){ JOptionPane.showMessageDialog(this, "请输入正确信息,不允许输入负数!"); } if(maxTime == 0){ int result = JOptionPane.showConfirmDialog(this, "设置完成,是否重新开始游戏?"); if (result == 0){ for (int i =0;i<19;i++){ for (int j =0;j<19;j++){ allChess[i][j] = 0; } } //allChess = new int[19][19]; message = "黑方先行"; isBlack = true; blackTime = maxTime; whiteTime = maxTime; blackMessage = "无限制"; whiteMessage = "无限制"; this.repaint(); } } if(maxTime>0){ int result = JOptionPane.showConfirmDialog(this, "设置完成,是否重新开始游戏?"); if (result == 0){ for (int i =0;i<19;i++){ for (int j =0;j<19;j++){ allChess[i][j] = 0; } } //allChess = new int[19][19]; message = "黑方先行"; isBlack = true; blackTime = maxTime; whiteTime = maxTime; blackMessage = maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); whiteMessage = maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60); t.resume(); this.repaint(); } } }catch (NumberFormatException e1){ JOptionPane.showMessageDialog(this, "请输入正确信息!"); } } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=170 && e.getY()<=200){ JOptionPane.showMessageDialog(this, "这是一个五子棋游戏程序,黑白双方轮流下棋,当某一方连到五子时游戏结束!"); } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=220 && e.getY()<=250){ JOptionPane.showMessageDialog(this, "游戏已暂停"); canPlay = false; } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=270 && e.getY()<=300){ JOptionPane.showMessageDialog(this, "游戏继续进行"); canPlay = true; } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=320 && e.getY()<=350){ int result = JOptionPane.showConfirmDialog(this, "是否确认认输?"); System.out.println(result); if(result == 0){ if(isBlack == true){ JOptionPane.showMessageDialog(this, "黑方已经认输,游戏结束!"); } else { JOptionPane.showMessageDialog(this, "白方已经认输,游戏结束!"); } canPlay = false; } } if(e.getX()>=390 && e.getX()<=480 && e.getY()>=420 && e.getY()<=450){ JOptionPane.showMessageDialog(this, "游戏结束"); System.exit(0); } } private boolean checkWin(){ boolean flag = false; int count = 1; int color = allChess[x][y]; /* int i = 1; while (color == allChess[x+i][y]){ count ++; i++; } i = 1; while (color == allChess[x-i][y]){ count ++; i++; } if(count >= 5){ flag = true; } int i2 = 1; int count2 = 1; while (color == allChess[x][y+i2]){ count2 ++; i2++; } i2 = 1; while (color == allChess[x][y-i2]){ count2 ++; i2++; } if(count2 >= 5){ flag = true; } int i3 =1; int count3 = 1; while (color == allChess[x+i3][y-i3]){ count3 ++; i3++; } i3 = 1; while (color == allChess[x-i3][y+i3]){ count3 ++; i3++; } if(count3 >= 5){ flag = true; } int i4 =1; int count4 = 1; while (color == allChess[x+i4][y+i4]){ count4 ++; i4++; } i4 = 1; while (color == allChess[x-i4][y-i4]){ count4 ++; i4++; } if(count4 >= 5){ flag = true; }*/ count =this.checkCount(1, 0, color); if(count >= 5){ flag = true; }else { count = this.checkCount(0, 1, color); if(count >= 5){ flag = true; }else { count = this.checkCount(1, -1, color); if(count >= 5){ flag = true; }else { count = this.checkCount(1, 1, color); if(count >= 5){ flag = true; } } } } return flag; } private int checkCount(int xChange , int yChange ,int color){ int count = 1; int tempX = xChange; int tempY = yChange; while (x + xChange >=0 && x+xChange<=18 && y+yChange>=0 && y+yChange<=18 && color == allChess[x+xChange][y+yChange]){ count ++; if(xChange != 0) xChange ++; if(yChange != 0){ if(yChange > 0) yChange ++; else { yChange --; } } } xChange = tempX; yChange = tempY; while (x - xChange >=0 && x-xChange<=18 && y-yChange>=0 && y-yChange<=18 && color == allChess[x-xChange][y-yChange]){ count ++; if(xChange != 0) xChange ++; if(yChange != 0){ if(yChange > 0) yChange ++; else { yChange --; } } } return count; } public void run(){ if (maxTime > 0){ while (true){ if (isBlack){ blackTime --; if (blackTime == 0){ JOptionPane.showMessageDialog(this, "黑方超时,游戏结束!"); } }else{ whiteTime --; if (whiteTime == 0){ JOptionPane.showMessageDialog(this, "白方超时,游戏结束!"); } } blackMessage = blackTime/3600+":"+(blackTime/60-blackTime/3600*60)+":"+(blackTime-blackTime/60*60); whiteMessage = whiteTime/3600+":"+(whiteTime/60-whiteTime/3600*60)+":"+(whiteTime-whiteTime/60*60); this.repaint(); try{ Thread.sleep(1000); }catch(InterruptedException e){ e.printStackTrace(); } } } } }
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
只因接了一个电话,程序员被骗 30 万!
今天想给大家说一个刚刚发生在我身边的一起真实的诈骗经历,我的朋友因此被骗走30万。注:为了保护当事人隐私,部分情节进行了修改。1平安夜突来的电话开始以为就像普通的诈骗一样,想办法让你把钱...
我一个37岁的程序员朋友
周末了,人一旦没有点事情干,心里就瞎想,而且跟几个老男人坐在一起,更容易瞎想,我自己现在也是 30 岁了,也是无时无刻在担心自己的职业生涯,担心丢掉工作没有收入,担心身体机能下降,担心突...
python自动下载图片
近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。 可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉思。。。。 突然旁边的IOS同事问:‘嘿,兄弟,我发现一个网站的图片很有意思啊,能不能帮我保存下来提升我的开发灵感?’ 作为一个坚强的社畜怎么能说自己不行呢,当时朕就不假思索的答应:‘oh, It’s simple. Wait for me for a ...
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
【程序人生】程序员接私活常用平台汇总
00. 目录 文章目录00. 目录01. 前言02. 程序员客栈03. 码市04. 猪八戒网05. 开源众包06. 智城外包网07. 实现网08. 猿急送09. 人人开发10. 开发邦11. 电鸭社区12. 快码13. 英选14. Upwork15. Freelancer16. Dribbble17. Remoteok18. Toptal19. AngelList20. Topcoder21. ...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
木兰编程语言,当事人最新回复来了
同行12年,不知Python是木兰,当事人回应来了
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
为什么程序猿都不愿意去外包?
分享外包的组织架构,盈利模式,亲身经历,以及根据一些外包朋友的反馈,写了这篇文章 ,希望对正在找工作的老铁有所帮助
Java校招入职华为,半年后我跑路了
何来 我,一个双非本科弟弟,有幸在 19 届的秋招中得到前东家华为(以下简称 hw)的赏识,当时秋招签订就业协议,说是入了某 java bg,之后一系列组织架构调整原因等等让人无法理解的神操作,最终毕业前夕,被通知调往其他 bg 做嵌入式开发(纯 C 语言)。 由于已至于校招末尾,之前拿到的其他 offer 又无法再收回,一时感到无力回天,只得默默接受。 毕业后,直接入职开始了嵌入式苦旅,由于从未...
世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
点击上方蓝字设为星标下面开始今天的学习~今天分享四个代码量很少,但很牛逼很经典的算法或项目案例。1、no code 项目地址:https://github.com/kelseyhight...
立即提问