js知识点积累

js知识点积累

1、js如何在jsp中,通过点击事件创建多个表单?

这里主要通过dom对象,用innerHTMLappendChild来创建多个表单。但是要注意的是element.innerHTML会将element原来的代码覆盖,而appendchild会在element中进行追加

参考

...
<div id="selectAdd">
    <div class="parametersetup_title">所选特征:</div>
    <div class="parametersetup_content">
        <div id="bbb">
            <select id="Feature" name="Feature">
                <%--<%	for(int i=1;i<=inputdata.getdimension();i++)--%>
                <%--{%>--%>
                <%--<option value="<%= String.valueOf(i)%>"--%>
                <%--<%if(i==1) {%>selected<%}%>><%= inputdata.getcolname(i)%>--%>
                <%--</option>--%>
                <%--<%	}%>--%>
            </select>
            <input type="button" value="添加" onclick="add()"/>
        </div>
    </div>
</div>
...
<script type="text/javascript">

	//将java数组转化成json,可和js进行类型转换
    var featureName = <%= featureName%>;  //不知道为啥子不能用el表达式,只能用jsp表达式

    //console.log(featureName)

	//判断"数据序列"选了什么,避免特征选择和数据序列选择重复
	var sequenceId = document.getElementById("Sequence").selectedIndex;
	//console.log((sequenceId))

	innerHTMLStr = "";
	if(sequenceId == 0){
        var k = 0;
        for (var i = 1; i < featureName.length; ++i){
            if(k == 1){
                innerHTMLStr += "<option value =" + (i + 1) + "selected>" +  featureName[i] + "</option>";
			}else{
                innerHTMLStr += "<option value =" + (i + 1) + ">" +  featureName[i] + "</option>";
			}
        }
	}else{
        var k = 0;
        for (var i = 0; i < featureName.length; ++i){
            if(k == 0){
                innerHTMLStr += "<option value =" + (i + 1) + "selected>" +  featureName[i] + "</option>";
            }else if(k != sequenceId){
                innerHTMLStr += "<option value =" + (i + 1) + ">" +  featureName[i] + "</option>";
            }
        }
	}

    document.getElementById("Feature").innerHTML = innerHTMLStr;

    function add(){

        var dom1 = document.createElement('div');
        dom1.className = 'parametersetup_title';
        document.getElementById("selectAdd").appendChild(dom1);

        var dom2 = document.createElement('div');
        dom2.className = 'parametersetup_content';

        var str = "<select>";

        innerHTMLStr = "";
        if(sequenceId == 0){
            var k = 0;
            for (var i = 1; i < featureName.length; ++i){
                if(k == 1){
                    innerHTMLStr += "<option value =" + (i + 1) + "selected>" +  featureName[i] + "</option>";
                }else{
                    innerHTMLStr += "<option value =" + (i + 1) + ">" +  featureName[i] + "</option>";
                }
            }
        }else{
            var k = 0;
            for (var i = 0; i < featureName.length; ++i){
                if(k == 0){
                    innerHTMLStr += "<option value =" + (i + 1) + "selected>" +  featureName[i] + "</option>";
                }else if(k != sequenceId){
                    innerHTMLStr += "<option value =" + (i + 1) + ">" +  featureName[i] + "</option>";
                }
            }
        }

        str += innerHTMLStr + "</select>";
        console.log(str);
        dom2.innerHTML = str;
        document.getElementById("selectAdd").appendChild(dom2);
    }
</script>

运行效果:
在这里插入图片描述

2、js创建二维数组

参考JS定义二维数组的三种方法

3、js用split()切分字符串

js在接收java的JSON数据(假设为arr)时,需要对数据进行split,但是直接用会出现问题,需要将arr转成字符串(toString())参考value.split is not a function 的原因

4、iframe子页面如何给父页面传值
父页面: BOOST.jsp
<div id="BOOST_con4" style="display:none">
	<iframe name="SHOWDATA_BOOST" src="../../resultshow/resultDrivenBOOST.jsp"></iframe>
</div>
子页面: resultDrivenBOOST1.jsp
function submitModelNum(modelNum) {
		var innerHTMLStr = "";
		innerHTMLStr += '<input type="hidden" name="modelNum" value="' + modelNum + '">';

		var div = document.createElement('div');
		div.innerHTML = innerHTMLStr;

		document.getElementById("modelSelect").appendChild(div);

        //把执行等待滚动条打开
        // document.getElementById("loader_container1").style.display="block";

        //通过父页面把分析结果的页面打开
		//parent.document.getElementById("BOOST_tab5").style.display="block";

		//子页面给父页面传值
		var label = document.getElementById("label").value;
		var height = document.getElementById("height" + modelNum).value;
		var times = document.getElementById("times" + modelNum).value;
		var threshold = document.getElementById("threshold" + modelNum).value;
		parent.getChildVal(featureIndexStr,label,height,times,threshold);
}
父页面:BOOST.jsp:
...
function getChildVal(features,label,height,times,threshold){

        document.getElementById("Sequence").value = label;
	    document.getElementById("featureBox").value = features;
	    document.getElementById("BOOST_parameter1").value = height;
        document.getElementById("BOOST_parameter2").value = times;
        document.getElementById("BOOST_parameter3").value = threshold;
        alert(features + ' ' + height + ' ' + times + ' ' + threshold);

        validate_BOOST(document.parameterform,1);

        document.parameterform.action="../../resultshow/resultDrivenBOOST1.jsp";
        document.parameterform.target="SHOWDATA_BOOST1";
        document.getElementById("model").value = "BOOST";
        document.parameterform.submit();
}

实现功能:

  • 子页面resultDrivenBOOST.jsp给主页面BOOST.jsp传值
  • 主页面获取子页面的值,修改表单数据,并实现表单提交
    在这里插入图片描述

在这里插入图片描述
参考

5、用js判断复选框(checkbox)是否选中的问题

参考用js判断复选框(checkbox)是否选中的问题

6、js阻止表单提交默认行为的两种方式

参考js阻止表单提交默认行为的两种方式

7、js操作Map对象
8、js定义二维数组(变长的)
9、js读取文件表单
10、js解析json字符串为json对象
11、js使用ajax + setInterval实现视频实时检测

如果单纯使用ajax访问服务器的话,前端页面会卡死,例如这样

while(true){
    var xhr = new XMLHttpRequest();
    console.log('新建xhr对象,readyState的值:' + xhr.readyState);

    xhr.open('GET', 'http://127.0.0.1:5000/video_detect');
    <!--                console.log('使用open方法后,readyState的值:' + xhr.readyState);-->
    xhr.send();

    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4 && xhr.status === 200) {
            <!--                        console.log(xhr.statusText);-->
            console.log(xhr.responseText);
        }
    };

    postMessage(xhr.responseText);
}

我考虑过许多方法,由于自己js太差了,多线程的worker,H5的postMessage,addEventListener不知道怎么用(附一下参考链接,方便以后学习),后来想到了js定时器,最后总算能实现这个功能了(参考https://www.runoob.com/w3cnote/js-timer.html)。

下面是菜鸟教程给的例子:

<html>
<body>

<input type="text" id="clock" />
<script type="text/javascript">
    var int=self.setInterval("clock()",1000);
    function clock()
    {
        var d=new Date();
        var t=d.toLocaleTimeString();
        document.getElementById("clock").value=t;
    }
</script>

<button onclick="int=window.clearInterval(int)">停止</button>

</body>
</html>

经过修改,可以实现将视频的检测结果实时显示在页面上

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="result"></div>
</body>
<script>

    var res=self.setInterval("getResult()",100);

    function getResult(){
        var result = document.getElementById("result")
        var xhr = new XMLHttpRequest();
        console.log('新建xhr对象,readyState的值:' + xhr.readyState);

        xhr.open('GET', 'http://127.0.0.1:5000/video_detect');
        <!--                console.log('使用open方法后,readyState的值:' + xhr.readyState);-->
        xhr.send();

        xhr.onreadystatechange = function() {
            if (xhr.readyState === 4 && xhr.status === 200) {
                <!--                        console.log(xhr.statusText);-->
                 console.log(xhr.responseText);
                result.innerHTML = xhr.responseText
            }
        };
    }
</script>
</html>

ajax:
https://www.cnblogs.com/asheng2016/p/7435426.html
https://www.cnblogs.com/jackzhoumine/p/6562890.html

多线程:
https://www.cnblogs.com/langkezzz/p/10157274.html

监听器:
addListener:https://www.it1352.com/2027330.html
addEventListener:https://blog.csdn.net/qq_31879707/article/details/54894857
https://www.jianshu.com/p/3d8748f85a06

定时器
setInterval:https://www.runoob.com/w3cnote/js-timer.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值