2014-01-18 1 views
0

При использовании код ниже в сценарии всегда получает нуль при хВсегда получить нулевое значение из iterateNext() для document.evaluate

var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext(); 

Но использовать эту команду в консоли Chrome, е может получить правильное значение, почему это происходит ?

Вот полный код JS файла и HTML-файла

test.js

function testClick(xpath){ 
var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext(); 
// var a = e.iterateNext(); 
if(document.createEvent){ 
    var event = document.createEvent('MouseEvents'); 
    event.initEvent('click', true, false); 
    e.dispatchEvent(event); 
} 
else if(document.createEventObject){ 
    e.fireEvent('onclick'); 
} 
} 


var xpath = "(//a[@href='./detail.html'])[1]"; 
setTimeout(testClick(xpath), 3000); 

HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
"http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <script type="text/javascript" src="../js/test.js"></script> 
</head> 
<body> 
    <ul> 
     <li class="carmen-li"><a href="./detail.html">1</a></li> 
     <li><a href="./detail.html">2</a></li> 
     <li><a href="./detail.html">3</a></li> 
    </ul> 
</body> 
</html> 

ответ

0

Проблема решена.

Этот код, приведенный ниже, работает, кажется, не может вызвать метод с параметром в окне.

При вызове метода с параметром в window.onload он выполнит этот метод перед window.onload, поэтому элемент не завершил загрузку при выполнении метода, поэтому он вернет значение null.

function testClickWithParam(xpath){ 
    var e = document.evaluate(xpath, document, null, XPathResult.ANY_TYPE, null).iterateNext(); 

    if(document.createEvent){ 
     var event = document.createEvent('MouseEvents'); 
     event.initEvent('click', true, false); 
     e.dispatchEvent(event); 
    } 
    else if(document.createEventObject){ 
    e.fireEvent('onclick'); 
    } 
} 

function testClickLink(){ 
    var xpath = "(//a[@href='./detail.html'])[1]"; 
    console.log(window.location.href); 
    testClickWithParam(xpath); 
} 


window.onload = testClickLink; 

 Смежные вопросы

  • Нет связанных вопросов^_^