2014-03-18 53 views
7

的特性 'parentNode' 的JavaScript我使用:JavaScript错误:无法读取空

javascript: c = '{unit}, ({coords}) {player} |{distance}| {return}'; 
p = ['Scout', 'LC', 'HC', 'Axe', 'Sword', 'Ram', '***Noble***']; 

function V() { 
    return 1; 
} 
window.onerror = V; 

function Z() { 
    d = (window.frames.length > 0) ? window.main.document : document; 
    aid = d.getElementById('editInput').parentNode.innerHTML.match(/id\=(\d+)/)[1]; 

    function J(e) { 
     vv = e.match(/\d+\|\d+/g); 
     return (vv ? vv[vv.length - 1].match(/((\d+)\|(\d+))/) : null); 
    } 
    function K(e) { 
     f = parseInt(e, 10); 
     return (f > 9 ? f : '0' + f); 
    } 
    function L(g, e) { 
     return g.getElementsByTagName(e); 
    } 
    function N(g) { 
     return g.innerHTML; 
    } 
    function M(g) { 
     return N(L(g, 'a')[0]); 
    } 
    function O() { 
     return k.insertRow(E++); 
    } 
    function W(f) { 
     return B.insertCell(f); 
    } 
    function P(g, e) { 
     g.innerHTML = e; 
     return g; 
    } 
    function X(e) { 
     C = B.appendChild(d.createElement('th')); 
     return P(C, e); 
    } 
    function Y(f) { 
     return K(f/U) + ':' + K(f % (U)/T) + ':' + K(f % T); 
    } 
    U = 3600; 
    T = 60; 
    R = 'table'; 
    S = 'width'; 
    s = L(document, R); 
    for (j = 0; j < s.length; j++) { 
     s[j].removeAttribute(S); 
     if (s[j].className == 'main') { 
      s = L(L(s[j], 'tbody')[0], R); 
      break; 
     } 
    } 
    D = 0; 
    for (j = 0; j < s.length; j++) { 
     s[j].removeAttribute(S); 
     if (s[j].className = 'vis') { 
      k = s[j]; 
      if (t = k.rows) { 
       D = t.length; 
       break; 
      } 
     } 
    } 
    for (E = 0; E < D; E++) { 
     l = t[E]; 
     m = (u = l.cells) ? u.length : 0; 
     if (m) { 
      u[m - 1].colSpan = 5 - m; 
      if (N(u[0]) == 'Arrival:') { 
       Q = new Date(N(u[1]).replace(/<.*/i, '')); 
      } else { 
       if (N(u[0]) == 'Arrival in:') { 
        v = N(u[1]).match(/\d+/ig); 
       } 
      } 
      if (E == 1) { 
       G = M(u[2]); 
      } 
      if (E == 2) { 
       w = J(M(u[1])); 
      } 
      if (E == 4) { 
       x = J(M(u[1])); 
      } 
     } 
    } 
    y = v[0] * U + v[1] * T + v[2] * 1; 
    n = w[2] - x[2]; 
    o = w[3] - x[3]; 
    F = Math.sqrt(n * n + o * o); 
    H = F.toFixed(2); 
    E = D - 2; 
    s = L(k, 'input'); 
    i = s[1]; 
    h = s[0]; 
    h.size = T; 
    B = O(); 
    P(W(0), 'Distance:').colSpan = 2; 
    P(W(1), H + ' Fields').colSpan = 2; 
    B = O(); 
    X('Unit'); 
    X('Sent'); 
    X('Duration'); 
    X('Name to'); 
    c = c.replace(/\{coords\}/i, w[1]).replace(/\{distance\}/i, H).replace(/\{player\}/i, G); 
    for (j in p) { 
     z = Math.round([9.00000000, 10.00000000, 11.00000000, 18.0000000015, 22.00000000, 30.00000000, 35.0000000][j] * T * F); 
     A = z - y; 
     if (A > 0) { 
      I = Y(z); 
      B = O(); 
      P(W(0), p[j]); 
      P(W(1), A < T && 'just now' || A < U && Math.floor(A/T) + ' mins ago' || Y(A) + ' ago'); 
      P(W(2), I); 
      C = W(3); 
      q = C.appendChild(i.cloneNode(1)); 
      r = C.appendChild(h.cloneNode(1)); 
      r.id = 'I' + j; 
      r.value = c.replace(/\{duration\}/i, I).replace(/\{sent\}/i, new Date(Q.valueOf() - z * 1000).toLocaleString().replace(/.\d{4}/i, '').replace(/(\w{3})\w*/i, '$1')).replace(/\{return\}/i, new Date(Q.valueOf() + z * 1000).toString().replace(/\w+\s*/i, '').replace(/(\d*:\d*:\d*)(.*)/i, '$1')).replace(/\{unit\}/i, p[j]).replace(/\{attack_id\}/i, aid); 
      q.onmousedown = new Function('h.value=d.getElementById(\'I' + j + '\').value;'); 
     } 
    } 
} 
Z(); 

错误我收到:

Uncaught TypeError: Cannot read property 'parentNode' of null

的URL看起来是这样的:

game.php?village=2100&id=4348754&type=other&screen=info_command

+0

'#editInput'元素可能不在页面上 – urz0r

回答

7

有两种可能性:

  1. editInput是一个错字,并且该元素的实际id不同(id是区分大小写的)。
  2. 当DOM未准备好时,您正在执行此代码。为防止出现这种情况,请在</body>结束标记之前执行代码,或者将其包裹在load事件的事件处理程序windowDOMContentLoaded事件document中。

EDITED如何包装你的代码:

window.onload = function() { 
    //your code here 
}); 
+0

如何将它包装在事件处理程序中? – Jeff

+0

已编辑帖子。检查它 –

+0

感谢编辑帖子奥斯卡,不幸的是这重新导向我一个404页,或者一般来说它不“注入”任何HTML。我认为editInput是一个错字!非常感谢你的帮助。 – Jeff

0

对我来说,这是滑块和形式验证之间有冲突,因为它们位于不同的页面,但目标的JavaScript文件,将两者同时,让没有滑块会拿出“无法读取空的特性“parentNode”错误,所以我添加到滑块如果语句中的所有网页:

if(document.getElementById("mainImage")){ 
var myImage = document.getElementById("mainImage"); 
var linkElement = myImage.parentNode; 

解决了我的问题,试试吧