второй внешний файл javascript не загружен - PullRequest
1 голос
/ 05 мая 2010

У меня есть эти строки в моем разделе заголовка HTML

<script type="text/javascript" src="../behaviour/location.js"></script>
<script type="text/javascript" src="../behaviour/ajax.js"></script>

Когда я использую либо изолированно, код во внешних файлах выполняется как ожидалось.

Однако, когда я использую оба, я обнаружил, что ни один не работает правильно. Что мне нужно сделать, чтобы это исправить?

location.js

// JavaScript Document

function addLoadEvent (func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function () {
            oldonload();
            func;
        }
    }
}

//county changer
function countyUpdate (message) {

    var name = message.getAttribute("name");
    var check = message.checked;
    var countyId = message.getAttribute("id");
    var countyId = countyId.split("_")[1];
    var innerpost = document.getElementById("innerpost_"+countyId); 
    var checks = innerpost.getElementsByTagName("input");

    for (var i = 0; i< checks.length; i++) {
        if (checks[i].checked == true && check == true) {
        checks[i].checked = false; 
        }
    }

}

//postcode changer
function postcodeUpdate (message) {
    var parent = message.parentNode.parentNode.getAttribute("id").split("_")[1];
    var county = "county_"+parent;
    var checkbox = document.getElementById(county);
    var checked = message.checked;

    if (checked == true) {
        checkbox.checked = false;
    }


}

//get a dynamic list of al postcode checkboxes
function getCounties () {
var county = document.getElementsByTagName("input");


for (var i = 0; i< county.length; i++) {
var check = county[i].getAttribute("type");

if (check == "checkbox") {  
var name = county[i].getAttribute("name");
var parent = county[i].parentNode.parentNode.getAttribute("id");
var parent = parent.split("_")[0];

//action for county
if (parent != "innerpost") {
county[i].onclick = function() { countyUpdate(this); };

    }//if


    //action for postcode
    if (parent == "innerpost") {
    county[i].onclick = function() { postcodeUpdate (this); }; 
    }//if

    }//if
    }//for
    }//function

    addLoadEvent (getCounties);

ajax.js

function loadXMLDoc()
{
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","cart.php",true);
xmlhttp.send();
}

И это встроенный код для активации второго файла:

<button type="button" onclick="loadXMLDoc()">Change Content</button>

Когда я пытаюсь использовать оба файла вместе, мне кажется, что я не могу использовать какие-либо функции (даже не простые предупреждения, заключенные в функцию).

Ответы [ 3 ]

2 голосов
/ 05 мая 2010

Когда я использую либо в изоляции, код во внешних файлах выполняется как ожидается.

Однако, когда я использую оба, я нахожу, что ни один не работает правильно. Что я нужно сделать, чтобы это исправить?

Похоже, у вас конфликт между двумя файлами. Как функция, которая названа так же или переменная и т. Д.

Не увидев файлов, вы могли бы:
1. Отследите конфликт имен (если это так) и измените его.
2. Инкапсулируйте код в файлы в различных объектах и ​​получите доступ к методам / свойствам и т.д. через них.

2 голосов
/ 05 мая 2010

Это произойдет, если скрипты конфликтуют друг с другом.

Пожалуйста, покажите нам сценарии и сообщения об ошибках.

0 голосов
/ 05 мая 2010

Моя ставка в том, что вы получаете беспорядок из этого window.onload= жонглирования. Я предлагаю вам использовать стандартный интерфейс window.addEventListener() (проверьте его наличие и используйте window.attachEvent(), когда стандартный интерфейс отсутствует, если вы тоже хотите поддерживать IE). Это также должно гарантировать, что функции onload выполняются в том же порядке, что и скрипты, которые их устанавливают. Что-то вроде:

if (window.addEventListener) {
  window.addEventListener('load', somefunc, false);
} else if (window.attachEvent) {
  window.attachEvent('onload', somefunc);
} // else, no way to add multiple onload handlers
...