在网页表格中模拟excle的搜索高亮显示功能。当在搜索框中输入需要的姓名时,若表格中存在对应的数据,则该表格背景色变为黄色。
下面为表的HTML源码:
表格搜索 姓名:
ID | 姓名 | 年龄 |
1 | 阿童木 | 30 |
2 | 机器猫 | 44 |
3 | 小叮当 | 53 |
4 | 海雅 | 69 |
5 | 祖鲁 | 27 |
5 | JavaScript权威指南 | 27 |
模拟思路:获取表格中姓名列对应的元素集合的value值,与输入表格值进行比较是否相等。若两值相等,则高亮显示,其余表格不变色。
1 window.οnlοad=function() 2 { 3 var oTxt=document.getElementById('name'); 4 var oBtn=document.getElementById('btn1'); 5 var oTab=document.getElementById('tab1'); 6 oBtn.οnclick=function() 7 { 8 for(var i=0;i
(1)出现问题
代码写成这样:
1 window.οnlοad=function() 2 { 3 var oTxt=document.getElementById('name'); 4 var oBtn=document.getElementById('btn1'); 5 var oTab=document.getElementById('tab1'); 6 var oValue=oTxt.value; 7 8 oBtn.οnclick=function() 9 {10 for(var i=0;i
造成第一次输入点击后,第二次输入点击无效。
初步定为问题产生的bug在于后者在于获取input元素的value时,定义变量var oValue=oTxt.value;
if(oTab.tBodies[0].rows[i].cells[1].innerHTML==oTxt.value)与
if(oTab.tBodies[0].rows[i].cells[1].innerHTML==oValue)两者的差异。
造成这个bug的原因是什么?
var oTxt=document.getElementById('name');
var oValue=oTxt.value;
if(oTab.tBodies[0].rows[i].cells[1].innerHTML==oValue)
与
var oTxt=document.getElementById('name');
if(oTab.tBodies[0].rows[i].cells[1].innerHTML==oTxt.value)
造成两个代码块的核心区别的原因是什么?
似乎在于变量赋值于点击事件触发函数调用的前后有关,将有问题的代码的变量移到函数内部,整个代码也正常了。JS中变量初始化的值只有一个?
window.οnlοad=function(){ var oTxt=document.getElementById('name'); var oBtn=document.getElementById('btn1'); var oTab=document.getElementById('tab1'); oBtn.onclick=function() { var oValue=oTxt.value; for(var i=0;i