summary of April -- fore

1、 Maximum call stack size exceeded 出现的原因

  • 可能是陷入死循环了;考虑递归调用中是否有结束的条件;
  • js的事件冒泡;
    事件冒泡:当一个元素接收到事件的时候,会把接收到的事件传给自己的父级,一直到window;(注意这里传递的仅仅是事件,并不传递所绑定的事件函数;所以如果父级没有绑定事件函数,就算传递了事件,也不会有什么表现,但事件确实传递了)

2、动态设置echarts的series以及legend?

function oneOption(priceArray,seriesArry,weekArry){// 必须用js语法不能用jqueryvar myChart = echarts.init(document.getElementById("runChart"));option = {tooltip: {trigger: 'axis'},legend: {y:'bottom',data:[]},toolbox: {show: true},xAxis:  {axisTick: {show: false},type: 'category',data: weekArry},yAxis: {type: 'value'},series: seriesArry};myChart.setOption(option);var option1=myChart.getOption();var legend={y:'bottom',data:priceArray};option1.legend=legend;myChart.setOption(option1,true);
}function one(reportName,subject,price1,price2) {jp.post("${ctx}/getData?reportName="+reportName,function(data){var data = eval("("+data+")");var priceArray = ['销售价','收购价'];var seriesArry = [];for (var j = 0;j < priceArray.length; j++) {seriesArry[j] = { name: priceArray[j],type:'line',data: data.list[j].dataList};}var weekArry = data.list[0].weekList;oneOption(priceArray,seriesArry,weekArry);});
}

3、jq绑定、触发、移除事件?

// 绑定一个或多个事件
$("div").bind("mouseover mouseout",function(){...});
$("#periods").click(function(){...});
// 绑定一次点击后就失效的事件
$("#periods").one("click",function(){...})// 触发事件(trigger方法触发被选元素的指定事件类型)
$('#btn').trigger("click");// 移除之前绑定的所有click事件
$("#periods").unbind("click"); 
// 移除所有
$('#btn').unbind();
// 取消绑定test函数
$('div').unbind('click', test);// 场景:
// 使用这个在于一个下拉框不同的下拉选项,另外一个input对应不同的点击事件
// 绑定事件前都先移除事件,因为click不能绑定多个方法
// 但是不能使用one,因为可能多次点击,但是都需要有事件

4、使用JQuery获取被选中的checkbox的value值?参考

<html><head><meta charset="gbk"><!-- 引入JQuery --><script src="jquery-1.3.1.js" type="text/javascript"></script></head><body><input type="checkbox" value="橘子" name="check">橘子1</input><input type="checkbox" value="香蕉" name="check">香蕉1</input><input type="checkbox" value="西瓜" name="check">西瓜1</input><input type="checkbox" value="芒果" name="check">芒果1</input><input type="checkbox" value="葡萄" name="check">葡萄1</input><input type="button" value="方法1" id="b1"><input type="button" value="方法2" id="b2"></body><script>//方法1$("#b1").click(function(){//$('input:checkbox:checked') 等同于 $('input[type=checkbox]:checked')//意思是选择被选中的checkbox$.each($('input:checkbox:checked'),function(){window.alert("你选了:"+$('input[type=checkbox]:checked').length+"个,其中有:"+$(this).val());});});//方法2$("#b2").click(function(){$.each($('input:checkbox'),function(){if(this.checked){window.alert("你选了:"+$('input[type=checkbox]:checked').length+"个,其中有:"+$(this).val());}});});</script>
</html>

5、关于window.parent的用处?

window.parent.refreshTable( ); //调用父页面刷新表格的方法
window.parent.location;//获得父页面的地址
var BIbaoBiaoUrl = window.parent.BIbaoBiaoUrl;//子页面调用父页面的报表路劲
var BIbaoBiaoUrl = “/bi/showreport.do”;// 父页面定义的url路径

6、(关于模板的妙用)

在js里面,经常需要使用js往页面中插入html内容;
如果html很短还好说,但是遇到描述里面的这么大段,直接用字符串存储会很困难,因为不光要处理单引号,还需要很多「+」号把字符串一个个连接起来,十分的不方便;
给script标签设置type=“text/template”,标签里面的内容不会被执行,也不会显示在页面上,但是可以在另一个script里面通过获取插入到页面中,这样就把大段的HTML操作从js里面分离开了;

var number = 222;
$('#id').append('' + number + '');
<script type="text/template" id="priTpl">// 使用Mustache模板的相关语法...
</script>
// 在另外的js中通过id引用对应的模板
var priTpl = $("#priTpl").html();
// 渲染对象到模板
Mustache.render(priTpl, obj); 

7、js的引用,可能会有缓存,为了保证重新部署到服务器后不会从缓存中读,需要给url拼一个参数,让他发起新的请求;

8、列表页点击查询按钮和回车请求到的数据不一致?

其实是请求了不同的路径:查询调价的form表单如果写了action的话,那么点回车就会走action的url,而不是bootstrapTable的请求,所以要把这个action的url写成空字符串;

9、解决ie上表格显示不全的问题?

<style>#report-table.bootstrap-table tbody tr td {position: inherit;	}style>

10、关于ajax异步请求遇到的问题?

$.ajax请求的url指向的方法必须没有返回值,或者返回类型为String,然后返回null,否则会报错404;
所以想用这个返回数据的话,必须返回json格式,使用response.getWriter().print(message)进行页面的渲染;
前台还要将后台返回的json字符串转换成json对象,然后使用数据:

  • var result = eval(’(’ + result + ‘)’); //eval是js自带的方法
  • var obj = JSON.parse(data);
  • var obj = str.parseJSON();

注意:如果obj本来就是一个JSON对象,那么使用eval()函数转换后(哪怕是多次转换)还是JSON对象,但是使用parseJSON()函数处理后会有问题;

扩展:将JSON对象转化为JSON字符串:

  • var last=obj.toJSONString();
  • var last=JSON.stringify(obj);

11、JQuery使用trigger模拟触发selete的选择change事件;

<select id='province'><option value='6'>66<option value='7'>77<option value='8'>88
</select>
$('#btn1').on("click", function () {$('#province').get(0).selectedIndex = 1;$('#province').trigger("change");
});
//trigger() 方法触发被选元素的指定事件类型。
//触发 input 元素的 select 事件:
$("button").click(function(){$("input").trigger("select");
});
//遇到的问题:
//系统中点击重置按钮的话,下拉框中选中的值不会被清空!要加上这个事件,否则不会改变下拉框的显示的值;
("#searchForm  select").val("").trigger("change");

12、前端教训?

页面显示有问题了的话,需要看看控制台有没有报错。
之前遇到的一个是下拉框中的文字显示一半,然后就是因为没有加select2插件导致的。

13、cmd中使用sqlplus登录oracle的话,可以查看oracle的版本;
sqlplus system/123123123@orcl;

14、colspan是列合并,rowspan是行合并,后面是是合并的数量;

15、弹框的话,其实就是需要一个window载体,和列表页没有多大的区别;

16、当元素失去焦点时发生 blur 事件:
$(“input”).blur(function(){
$(“input”).css(“background-color”,"#D6D6FF");
});

17、IE和edge浏览器中get请求会优先走缓存,解决方法有:

  • 在链接后面加随机的索引字符串或者时间戳
    时间戳:myConstant.sqlUrl + “/uid” + “?time=” + (+new Date()),
    随机数:myConstant.sqlUrl + “/uid” + “?time=” + Math.random(),
  • 直接在header里写上禁止缓存(也可能是ajax中的某个属性标识禁止缓存)

18、IE8 可能不支持onclick事件,解决方法?
如果用了JQquery,那就用$(“input:[type=radio]”).click(function(){…});代替;
或者其他的监听click的事件(可以通过css或者id获得需要监听的属性);

19、点击标签时弹框?

// del方法中写一个打开window的操作
<a href="javascript:del()"> 删除</a>
// 通过class监听
<a href="#" class="edit2">删除</a>
//点击市触发该事件
$(document).on("click",".edit2",function(){
var value = $(this).val();
var id = $(this).closest("tr").find("td:first").data("id");
var index = $(this).closest("tr").children().index($(this).closest("td"))-1;
var code = $("#report-table > thead > tr:last").find("td").eq(index).data("code");
jp.openDialogView("弹框", '${ctx}/form?id='+id+'&start='+$("#strat").val(),'1000px', '550px');
});

20、wrap()方法的使用?

wrap() 方法把每个被选元素放置在指定的 HTML 内容或元素中;
eg:在 div 元素中包裹每个段落:$(“p”).wrap(“div标签”);
对应的,unwrap()方法,会删除被选元素的父元素(会删除所有父元素);

21、鼠标移上就触发事件?

<li id="grain" class="category categoryhover" onmouseover="grain()">原粮</li>
function grain(){$('#grain').addClass("categoryhover");//动态添加class,不会移除原有的$('#processedGrain').removeClass("categoryhover");//动态移除指定的class//通过修改节点的style指定属性对样式进行修改,有的需要加单位grainUl.style.display="block";refinedOilUl.style.backgroundColor="#ffffff";//background-color需要使用"驼峰格式"
}

22、关于列表页的formatter?

			,{field: 'periodId.period',title: '报表期',sortable: true,formatter:function(value, row , index){var name = row.periodId ? row.periodId.period : "";return name;}},{field: 'name',title: '报表名称',sortable: true,formatter:function(value, row , index){return "+row.id+"\",true)'>"+value+"";}}

23、bootStrap table传递参数?

看bootStrap table文档不难发现它有一个queryparams属性,是向后台传递参数的,默认参数已有pageSize、pageIndex等,那么怎么传递自定义的参数呢?

	function Search() {var name= $('#txtName').val();var pass= $('#txtPass').val();var options = $('#table').bootstrapTable('refresh', {query: {Name:name,Pass:pass}});}
$('#priTable').bootstrapTable('refresh',{query:{second:$("#weekStrat").val()}});

情景:导出的时候,使用bootStrapTable传参,时间控件选择其他时间无法传递成功(即想刷新列表数据),总是传递页面加载进来的参数;所以,在页面加载的时候拼接在url后面一个参数,刷新的时候,又传递另外一个参数,看哪个参数不为空,就拿哪个参数的值;

24、select2插件做下拉框多选以及获得选中的值?参考

    //form:options会被Spring处理成options,HTML里没有form:options这个标签;//$("#tranType").html('');//所以想要这样通过html添加options是错误的,没有搞懂view层和前端的关系// 1引入select2相关的js以及css后,声明一个select载体<form:select id="remarks" path="remarks" style="width:250px;height:30px" ><form:options items="${yearList}"/>//获得model中的list集合,还可以是map</form:select>// 2初始化$('#remarks').select2({tags : true,multiple : true,// 标识下拉框多选maximumSelectionLength : 5,minimumInputLength : 0,allowClear : true,language: "zh-CN"}); // 加载进来设置为空$("#remarks").select2("val", " ");// 3获得多选下拉框中的值$('#remarks').change(function(){var o = document.getElementById('remarks').getElementsByTagName('option');var all = "";for(var i=0;i<o.length;i++){if(o[i].selected){all+=o[i].value+",";}}all = all.substr(0, all.length - 1);//去掉末尾的逗号$("#timeSpan").val(all);//赋值给隐藏的文本框});

25、下拉框数据联动?

function changePriceType() {$("#priceType").val("").trigger("change");// 设置某下拉框选中数据为空var subject = $("#subject").find("option:selected").text();// 获得某下拉框选中的数据的文本$("#priceType").removeAttr("disabled");	// 移除不可用属性if (subject == '科目') {for (var i = 1;i < 5;i++) {var month = $('select[name="priceType"] option:eq(' + i + ')');var monthP = month.parent("span");if(monthP.length){//如果当前节点有span就先去掉,否则容易包装多层month.replaceAll(monthP);}//保证下拉选项都是可用的了,再去包装自己不想显示的if (i > 2) {//下拉框option在IE下jquery方法hide()无效,所以不可以month.hide()month.wrap("");}}} 
}
// 设置属性
$("#pointType").attr("disabled","disabled");
// 某下拉框中不显示第4个下拉选项
var subjectHidden = $('select[name="subject"] option:eq(4)');
subjectHidden.wrap("");

26、获得下拉框的值?(参考)

//js获取select标签选中的值
var obj = document.getElementById("testSelect"); //定位id
var index = obj.selectedIndex; // 选中索引
var text = obj.options[index].text; // 选中文本
var value = obj.options[index].value; // 选中值
//jQuery中获得选中select值
//第一种方式
$('#testSelect option:selected').text();//选中的文本
$('#testSelect option:selected').val();//选中的值
$("#testSelect").get(0).selectedIndex;//索引
//第二种方式
$("#tesetSelect").find("option:selected").text();//选中的文本
$("#tesetSelect").find("option:selected").val();
$("#tesetSelect").find("option:selected").get(0).selectedIndex;

27、js的中尽量使用单引号,当单引号里边还需要引号的时候双引号就上场了;
举例:var span = $(’’);

28、jq为input绑定点击事件?

//第一种写法:
$(document).ready(function(){$("#getMe").click(function(){alert("It's me!");})
})
//第二种写法:
$("#getMe").bind("click",function(){alert("It's me!");
})
//第三种写法:
$("#getMe").on("click",function(){alert("It's me!");
})
//跳转到另外一个页面:
window.location.href="输入另一个页面的链接"

29、弹框就是一个载体,列表页面的url直接在弹框上用就可以;

30、


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部