1

編集:これがテーブルにあるものの全体の塊です

これがお役に立てば幸いです。アラートに対して以前は機能していたコードが機能しなくなりました。これはテーブルにあることと関係がありますか?

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


少し変更しようとしているWebアプリがあります。とにかく、リンクをクリックすると、メールを送信する関数を呼び出すようにします。最初の項目はページ上のテキストで、2番目の項目はユーザー名を呼び出す変数です。

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

これは機能しますが、すべてのアイテムにナイスネームIDがあるため、使用できません。

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

main.jspという別のファイルで名前の由来を示し、id = "nicename"を追加しましたが、3番目の項目をクリックすると、常に最初の項目の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

これを試して

<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

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}')">

3番目のオプションは、クリックされた要素に基づいて相対要素参照を使用し、HTMLノードを使用thisしてウォークし、必要な要素(タイトル)を取得することです。提供されている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

すべての助けに感謝し、ついに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 に答える