当前位置: 代码迷 >> Ajax >> 让ajax中兑现提示框
  详细解决方案

让ajax中兑现提示框

热度:195   发布时间:2012-11-23 22:54:33.0
让ajax中实现提示框

tooTip.html:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  
<html>
 <head>
  <title>Ajax Tooltip</title>
  <script type="text/javascript">    
    var xmlHttp;
    var dataDiv;
    var dataTable;
    var dataTableBody;
    var offsetEl;
  
    function createXMLHttpRequest() {
      if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();        
      }
    }
  
    function initVars() {
      dataTableBody = document.getElementById("courseDataBody");      
      dataTable = document.getElementById("courseData");
      dataDiv = document.getElementById("popup");
    }
  
    function getCourseData(element) {
      initVars();      
      createXMLHttpRequest();
      offsetEl = element;
      var url = "ToolTipServlet?key=" + escape(element.id);
      
      xmlHttp.open("GET", url, true);
      xmlHttp.onreadystatechange = callback;
      xmlHttp.send(null);
    }
  
    function callback() {
      if (xmlHttp.readyState == 4) {
        if (xmlHttp.status == 200) {
          setData(xmlHttp.responseXML);
        }
      }
    }
    
    function setData(courseData) {      
      clearData();
      setOffsets();
      var length = courseData.getElementsByTagName("length")[0].firstChild.data;
      var par = courseData.getElementsByTagName("par")[0].firstChild.data;
      
      var row, row2;
      var parData = "Par: " + par
      var lengthData = "Length: " + length;
      
      row = createRow(parData);      
      row2 = createRow(lengthData);
      
      dataTableBody.appendChild(row);
      dataTableBody.appendChild(row2);
    }
  
    function createRow(data) {      
      var row, cell, txtNode;
      row = document.createElement("tr");
      cell = document.createElement("td");
  
      cell.setAttribute("bgcolor", "#FFFAFA");
      cell.setAttribute("border", "0");             
  
      txtNode = document.createTextNode(data);
      cell.appendChild(txtNode);
      row.appendChild(cell);
     
      return row; 
    }
    
    function setOffsets() {
      var end = offsetEl.offsetWidth;
      var top = calculateOffsetTop(offsetEl);
      dataDiv.style.border = "black 1px solid";
      dataDiv.style.left = end + 15 + "px";
      dataDiv.style.top = top + "px";
    }
    
    function calculateOffsetTop(field) {
     return calculateOffset(field, "offsetTop");
    }
  
    function calculateOffset(field, attr) {
     var offset = 0;
     while(field) {
      offset += field[attr];
      field = field.offsetParent;
     }
     return offset;
    }
  
    function clearData() {      
      var ind = dataTableBody.childNodes.length;      
      for (var i = ind - 1; i >= 0 ; i--) {
        dataTableBody.removeChild(dataTableBody.childNodes[i]);   
      }
      dataDiv.style.border = "none";
    }    
  </script>
 </head>
 <body>
  <h1>Ajax Tooltip Example</h1>
  <h3>Golf Courses</h3>
  <table id="courses" bgcolor="#FFFAFA" border="1" cellspacing="0" cellpadding="2"/>
    <tbody>
      <tr><td id="1" onmouseover="getCourseData(this);" onmouseout="clearData();">Augusta National</td></tr>
      <tr><td id="2" onmouseover="getCourseData(this);" onmouseout="clearData();">Pinehurst No. 2</td></tr>
      <tr><td id="3" onmouseover="getCourseData(this);" onmouseout="clearData();">St. Andrews Links</td></tr>
      <tr><td id="4" onmouseover="getCourseData(this);" onmouseout="clearData();">Baltusrol Golf Club</td></tr>
    </tbody>    
  </table>
  <div style="position:absolute;" id="popup">
    <table id="courseData" bgcolor="#FFFAFA" border="0" cellspacing="2" cellpadding="2"/>
      <tbody id="courseDataBody"></tbody>
    </table>
  </div>
  
 </body>
</html>

ToolTipServlet.java:
  
/*
* ToolTipServlet.java
*
* Created on June 30, 2005, 8:29 PM
*/
  
package ajaxbook.chap4;
  
import java.io.*;
import java.util.HashMap;
import java.util.Map;
  
import javax.servlet.*;
import javax.servlet.http.*;
  
/**
*
* @author nate
* @version
*/
public class ToolTipServlet extends HttpServlet {
  
  private Map courses = new HashMap();
  
  public void init(ServletConfig config) throws ServletException {
    CourseData augusta = new CourseData(72, 7290);
    CourseData pinehurst = new CourseData(70, 7214);
    CourseData standrews = new CourseData(72, 6566);
    CourseData baltusrol = new CourseData(70, 7392);
    courses.put(new Integer(1), augusta);
    courses.put(new Integer(2), pinehurst);
    courses.put(new Integer(3), standrews);
    courses.put(new Integer(4), baltusrol);
  }
  
  /** Handles the HTTP <code>GET</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    Integer key = Integer.valueOf(request.getParameter("key"));
    CourseData data = (CourseData) courses.get(key);
    
    PrintWriter out = response.getWriter();
  
    response.setContentType("text/xml");
    response.setHeader("Cache-Control", "no-cache");
  
    out.println("<response>");
    out.println("<par>" + data.getPar() + "</par>");
    out.println("<length>" + data.getLength() + "</length>");
    out.println("</response>");
    out.close();
  }
  
  /** Handles the HTTP <code>POST</code> method.
   * @param request servlet request
   * @param response servlet response
   */
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
    doGet(request, response);
  }
    
  /** Returns a short description of the servlet.
   */
  public String getServletInfo() {
    return "Short description";
  }
  
  private class CourseData {
    private int par;
    private int length;
    
    public CourseData(int par, int length) {
      this.par = par;
      this.length = length;
    }
    
    public int getPar() {
      return this.par;
    }
    
    public int getLength() {
      return this.length;
    }
  }
}

?

  注释:提示框的位置是计算距离顶部的距离

  eg:

  假设 obj 为某个 HTML 控件。

  obj.offsetTop 指 obj 距离上方或上层控件的位置,整型,单位像素。

  obj.offsetLeft 指 obj 距离左方或上层控件的位置,整型,单位像素。

  obj.offsetWidth 指 obj 控件自身的宽度,整型,单位像素。

  obj.offsetHeight 指 obj 控件自身的高度,整型,单位像素。

  相关解决方案