仍然是 php 和 javascript 的初学者,但这个论坛有很大帮助......谢谢。
我有一个匹配的侧面照片库(每张照片 + 用户名 + 个人陈述 = 一个单元并包含在表格单元格中......信息通过"while"循环从SQL数据库获取为下面的$sql 1和$sql 2;我设置了一个限制 = 画廊中有 50 对照片)....图库完美显示。但是,我想通过在用户将鼠标悬停在图像上的单元周围放置绿色轮廓来使其更具用户交互性。我的测试用例(使用绿色轮廓)在脚本中手动设置所有变量时有效,如下所示(此处显示脚本中GreenBorder和NoBorder的两个函数):
<?php $i=1;
WHILE (($row = mysql_fetch_assoc(**$sql1**)) && ($drow =
mysql_fetch_assoc(**$sql2**))) {
echo "<script>
var Outline = new Array();
for (j=1; j<50; j++) {
Outline[j] = j;
}
function GreenBorder1() {
document.getElementById('X'+Outline[1]).style.outline = '#00CC00 solid
thick';
}
function NoBorder1() {
document.getElementById('X'+Outline[1]).style.outline = 'none';
}
function GreenBorder2() {
document.getElementById('X'+Outline[2]).style.outline = '#00CC00 solid
thick';
}
function NoBorder2() {
document.getElementById('X'+Outline[2]).style.outline = 'none';
}
</script>";
//Lots of code
echo "<td id='"X".$i."'">";
//Lots of Code
echo "<img src='"images/**image**.png'" onmouseover='"GreenBorder".$i."(this)'"
onmouseout='"NoBorder".$i."(this)'">";
echo "</td>";
//Lots of Code
$i++;
} // End while
?>
显然,我宁愿不写 50 个类型为 GreenBorder(number)() 和 NoBorder(number)() 的函数(实际上总共 200 个函数,因为 50 对带有 GreenBorder 或 NoBorder 的照片)。我正在寻找某种方法来使用我的脚本做一些事情,如下所示(我的想法是每次通过"for"循环运行都会为GreenBorder和NoBorder分配一个不同的函数编号j,这将与与功能编号j匹配的编号j的特定id匹配):
echo "<script> //I will name this *script2*
var Outline = new Array();
for (**j**=1; **j**<50; **j**++) {
Outline[**j**] = **j**;
function GreenBorder**j**() {
document.getElementById('X'+Outline[**j**]).style.outline = '#00CC00 solid
thick';
}
function NoBorder**j**() {
document.getElementById('X'+Outline[**j**]).style.outline = 'none';
}
}
</script>";
我尝试了多种方式来做到这一点(包括将我的函数名称写为 GreenBorder.j()、GreenBorder+j() 和 GreenBorder'j'() 等,包括使用括号)并进行了研究;我在网站上找到了这个链接:
Javascript 函数数组
但是这个链接的方法似乎都涉及实际编写 200 个函数(在一天结束时,如有必要,我会这样做;我的原始脚本也应该可以工作)。有什么方法可以通过在循环中对函数进行编号来使函数像我在 script2 中建议的那样紧凑?
(假设应用绿色边框是一个实验,所以你不想使用CSS。否则,CSS是这里的方式)
据我了解,这就是你想做的。
- 您有一个单元,该
- 单元由表格单元格 (TD) 内的图像和文本组成
- 当您将鼠标悬停在图像上时,您希望TD具有轮廓
您只需要编写一组函数即可执行此操作。
function GreenBorder(el) {
//get the parent of whatever node is passed in
el.parentNode.style.outline = '#00CC00 solid thick';
}
function NoBorder(el) {
el.parentNode.style.outline = 'none';
}
您的图像标记应如下所示
<img src="path/to/image" onmouseover="GreenBorder(this)" onmouseout="NoBorder(this)" >
这是它的一个小提琴 - http://jsfiddle.net/5Y6EK/
简单地说,你将当前悬停的图像传递给你的函数,函数通过添加和删除大纲来修改父节点。这假设您的图像直接位于 TD 元素下方。
你可能想通过查看不显眼的javascript来跟进这个实验。
以下是一些资源
http://en.wikipedia.org/wiki/Unobtrusive_JavaScript
http://www.ibm.com/developerworks/library/wa-aj-unobtrusive/
IBM 文章以 jQuery 为例,这是一个值得一看的库 - http://jquery.com/