OnClick函数的Javascript格式

OnClick函数的Javascript格式,javascript,formatting,Javascript,Formatting,编辑:以下是表格中内容的全部内容 希望这会有所帮助,因为以前用于警报的代码现在不再有效。这和它在桌子上有关系吗 例如: 我有一个网络应用程序,我正在尝试修改一点。无论如何,当我点击一个链接时,我希望它调用一个发送电子邮件的函数。第一项是页面上的文本,第二项是调用用户名的变量 在.jsp文件中,我修改了以下行: <a href="${videoUrl}" target="main" onclick="sendMail(this.parentNode.getElementsByTagName

编辑:以下是表格中内容的全部内容

希望这会有所帮助,因为以前用于警报的代码现在不再有效。这和它在桌子上有关系吗

例如:


我有一个网络应用程序,我正在尝试修改一点。无论如何,当我点击一个链接时,我希望它调用一个发送电子邮件的函数。第一项是页面上的文本,第二项是调用用户名的变量

在.jsp文件中,我修改了以下行:

<a href="${videoUrl}" target="main" onclick="sendMail(this.parentNode.getElementsByTagName('span')[2].attributes['title'].value, '${model.user.username}')">

我的问题是它没有发送电子邮件,我猜我有一些不正确的格式或以上代码的东西

有什么想法吗

功能:

<script>
function sendMail(video, user) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
     } else {// IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     }
xmlhttp.open("GET", "http://www.yourdomain.com/somedirectory/sendemail.php?video="+video+"&user="+user+'&ip=<%= request.getHeader("X-Real-IP") %>', false);
xmlhttp.send();
}
</script>

功能sendMail(视频、用户){
var-xmlhttp;
if(window.XMLHttpRequest){
xmlhttp=新的XMLHttpRequest();
}否则{//IE6,IE5
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
open(“GET”http://www.yourdomain.com/somedirectory/sendemail.php?video=“+video+”&user=“+user+”&ip=”,false);
xmlhttp.send();
}
这可以工作,但不可用,因为所有项都具有nicename ID:

<a href="${videoUrl}" target="main" onclick="sendMail(document.getElementById('nicename').title, '${model.user.username}')">

在另一个名为main.jsp的文件中,我添加了id=“nicename”,但是这不起作用,因为如果我单击第三项,它总是显示第一项的nicename:

<td ${class} style="padding-right:1.25em;white-space:nowrap">
<span id="nicename" title="${child.title}"><str:truncateNicely upper="${cutoff}">${fn:escapeXml(child.title)}</str:truncateNicely></span>
</td>

${fn:escapeXml(child.title)}
试试这个

<a href="${videoUrl}" target="main" onclick="sendMail(this.parentNode.getElementsByTagName('span')[2].attributes['title'].value, '${model.user.username}');">


您需要确保由
getElementsByTagName

getElementById
选择的至少有3个跨距将始终返回第一个元素(如果有多个元素具有相同的ID)。因此,它不适用于该目的。为每个nicename使用不同的ID,或者使用
name
(而不是ID)属性和
getElementsByName

对于
getElementsByName
示例:

<script>
    function doSendMail(videoIndex, userName) {
        //get the list of nicename elements
        var eles = document.getElementsByName('nicename');
        //send the mail. note: error handling is absent
        sendMail(eles[videoIndex].title, userName);
    }
</script>
<!--send mail for the 3rd video-->
<a href="${videoUrl}" target="main" onclick="doSendMail(2, '${model.user.username}')">

谢谢大家的帮助,终于通过使用2个parentElements实现了

<a href="${videoUrl}" target="main" onclick="sendMail(parentElement.parentElement.getElementsByTagName('span')[2].attributes['title'].value, '${model.user.username}');">


您是否尝试过使用浏览器的开发人员工具进行调试,以查看正在发送和/或返回的内容?是否检查了服务器日志?sendemail.php是否正在标记任何错误?这听起来更像是后端问题而不是前端问题。。。除非XHR请求不正确。我知道sendmail.php可以工作,如果我使用此代码,它会发送电子邮件。但是它不能正常工作,因为页面上列出的所有内容都具有相同的id@nutt318:您能否编辑您的问题,使其包含包含具有相同id的标签的HTML?你想用哪一个?@Jay:我添加了名字来源的代码部分。不幸的是,这不起作用。然而,这确实存在,但它抓住了第一个ID为“nicename”的元素。不确定如何正确添加调试语句,但您的建议在chromes控制台“Uncaught SyntaxError:Unexpected token liked”中给了我这个错误,没有添加“+它给出了此错误'Uncaught TypeError:无法读取未定义的属性'attributes'-onclickit表示您最多没有3个跨距,并且您正在尝试访问第三个跨距<代码>0-first、1-second、2-third
我的回答引入了
非法
错误,我已经纠正了它。注意跨度,代码最多看不到3个
[2]
。这可能就是为什么你会得到
未捕获的TypeError:无法读取未定义的属性“attributes”
我尝试了0-5,但没有效果,我认为应该是[2],因为它是onclick之后的第三个跨度。如果你看这里:它是来自直播页面的来源,它显示为第三个跨度,除非我遗漏了什么。所以当我点击链接时,它怎么知道它是哪个视频?我看到你有一张所有名字的名单,但是怎么会有2个呢?有没有办法添加一个循环或增加一个循环,例如:nicename1、nicename2、nicename3,然后让它获得正确的名称?根据您的表添加了第三个选项。可能更容易采用。我尝试了您的第三个选项,但出现以下错误
Uncaught ReferenceError:playLinkElement未定义main。视图:3110 doSendMail main。视图:3110 onclick
抱歉
playLinkElement
应该是
playLinkEle
<a href="${videoUrl}" target="main" onclick="sendMail(parentElement.parentElement.getElementsByTagName('span')[2].attributes['title'].value, '${model.user.username}');">