1

编辑:这是表中的全部内容

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

示例:http: //jsfiddle.net/fT8aL/13/


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

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

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

上面的代码在使用警报而不是 sendMail 函数进行测试时有效。你可以在这里查看:http: //jsfiddle.net/rr6Wk/72/

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

有任何想法吗?

功能:

<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>

这可行但不可用,因为所有项目都有 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>
4

3 回答 3

0

getElementById如果有多个具有相同 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}')">

第三种选择是使用基于单击元素的相对元素引用,使用this遍历HTML 节点以获取所需元素(标题)。在提供的 jsfiddle 中,该表有 7 列。要点击的元素在第 2 列(播放链接),所需元素在第 6 列(SPAN元素)。此方法既不需要name也不id需要属性。

<script>
function doSendMail(playLinkEle, user) {
  var row = playLinkEle.parentNode.parentNode; //get cell, then row
  var cell = row.cells[5]; //get 6th cell (same row)
  var ele = cell.firstElementChild; //get first child element
  sendMail(ele.title, user);
}
</script>
<table>
  <tr>
    <td>
      star image
    </td>
    <td>
      <a onclick="doSendMail(this, '${model.user.username}')" target="main" href="${videoUrl}">play link</a>
    </td>
    <td>
      empty column
    </td>
    <td>
      download link
    </td>
    <td>
      song id
    </td>
    <td>
      unknown detail
    </td>
    <td>
      <span title="The Title">The Title</span>
    </td>
    <td>
      duration detail
    </td>
  </tr>
</table>


      duration detail
于 2012-10-16T19:12:38.860 回答
0

尝试这个

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

您需要确保至少选择了 3 个跨度getElementsByTagName

于 2012-10-16T17:25:26.840 回答
0

感谢您的帮助,终于通过使用 2 个 parentElements 让它工作了!

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

于 2012-10-17T18:20:02.257 回答