приложение при наведении курсора - PullRequest
1 голос
/ 25 августа 2009

Я ищу и отображаю результаты из файла xml, используя комбинацию javascript и jquery. Результаты отображаются в виде миниатюр, которые после нажатия должны вызвать дополнительную информацию в jquery colorbox. Информация в палитре происходит из встроенного скрытого div (#affInfo). Я пытаюсь добавить новый div (pWindow) к скрытому div, используя событие onmouseover, определенное для тега привязки в миниатюре. Это не работает, и консоль Firebug возвращает сообщение об ошибке «отсутствует» после списка элементов showInfo ([объект HTMLDivElement]) "

Пожалуйста, посмотрите на мой код и предложите, как я могу устранить эту ошибку.

<head>
<script type="text/javascript">
$(document).ready(function(){
    //global vars
    var searchBoxes = $(".text");
    var searchBox1 = $("#searchme");

    //Effects for both searchbox
    searchBoxes.focus(function(e){
        $(this).addClass("active");
    });
    searchBoxes.blur(function(e){
        $(this).removeClass("active");
    });

    //Searchbox1, set focus when document is ready
    searchBox1.focus();
    $("#searchme").autocomplete(affiliates);

});
</script>
<script type="text/javascript">
window.onload = loadIndex;

function loadIndex() { // load indexfile
// most current browsers support document.implementation
    if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument("", "", null);
        xmlDoc.load("US_affiliates.xml");
    }
// MSIE uses ActiveX
    else if (window.ActiveXObject) {
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.load("US_affiliates.xml");
    }
}

function showInfo(affText) {
    document.getElementById('affInfo').appendChild(affText);
}

function searchIndex() { // search the index (duh!)
    if (!xmlDoc) {
        loadIndex();
    }
    // get the search term from a form field with id 'searchme'

    var searchterm = document.getElementById("searchme").value;
    var allitems = xmlDoc.getElementsByTagName("Affiliate");
    results = new Array;
    if (searchterm.length < 3) {
        document.getElementById('error').innerHTML = "Enter atleast 3 characters";
    } else {

        for (var i=0;i<allitems.length;i++) {
// see if the XML entry matches the search term,
// and (if so) store it in an array
            var name = allitems[i].lastChild.nodeValue;
            var exp = new RegExp(searchterm,"i");
            if ( name.match(exp) != null) {
                results.push(allitems[i]);
            }
        }
        document.getElementById('error').innerHTML = " ";
          var label=document.getElementById('result');  
          while( label.hasChildNodes() ) { 
            label.removeChild( label.lastChild ); 
            }
// send the results to another function that displays them to the user
    showResults(results, searchterm);
    }
}
// Write search results to a table
function showResults(results, searchterm) {
    if (results.length > 0) {
        $('#content').triggerTab(2);
        var xy = results.length;
        document.getElementById('error').innerHTML = xy + ' ' + 'results found for' + ' ' + '<strong>' + searchterm + '</strong>';
        var box = document.getElementById('result');

        for(var i=0; i<results.length; i++) {
            var container = document.createElement('div');
            var img = results[i].getAttribute("logo");
            var name = results[i].getAttribute("name");
            var id = results[i].getAttribute("id");
            var ch = results[i].getAttribute("custom_header");
            var cn = results[i].getAttribute("custom_left_nav");
            var xp = results[i].getAttribute("is_xml_partner");
            var type;
            if (img == null){
                ch = "No Co-branding";
            }
            if (cn == null){
                cn = "No Custom Links";
            }
            if (xp != null){
                type = "XML Partner";
            }else
            {
                type = "OEM Partner"
            }
            var icn = document.createElement('div');
            if(ch && cn && xp !== null){
                    icn.setAttribute('id', "abc");
            }
                else if(ch && cn !== null){
                    icn.setAttribute('id', "ab");
            }
                else if(ch!==null){
                    icn.setAttribute('id', "a");
            }
                else if(ch && xp !== null){
                    icn.setAttribute('id', "ac");
            }
                else if(cn!== null){
                    icn.setAttribute('id', "b");
            }
                else if(cn && xp !== null){
                    icn.setAttribute('id', "bc");
            }
                else if(xp!== null){
                    icn.setAttribute('id', "c");
            }
            else {
                    icn.setAttribute('id', "def");
            }
            var newpara = document.createElement('p');
            newpara.innerHTML = '<span>' + '<strong>' + name + '</strong>' + '<br> ' + '(' + id + ')' + '</span>';
            var newdiv = document.createElement('div');
            var divIdName = 'aff'+i;
            newdiv.setAttribute('id',divIdName);
            var pWindow = document.createElement('div');
            pWindow.setAttribute('id','affdetail');
            pWindow.innerHTML = '<h3>' + 'Customizations' + '</h3>' + '<br/>' + '<span>' + 'Affiliate:' + ' ' + '<strong>' + name + '</strong>' + '</span>' + '<br/>' + '<span>' + 'Type:' + '<strong>' + type + '</strong>' + '</span>' + '<br/>' + '<span>' + 'ID:' + ' ' + '<strong>' + id + '</strong>' + '</span>' + '<br/>' + '<span>' + 'Co-Branding:' + ' ' + '<strong>' +ch + '</strong>' +'</span>' + '<br/>' + '<span>' + 'Custom Left Nav:' + ' ' + '<strong>' + cn + '</strong>' + '</span>' + '<h3>' + 'Packages' + '</h3>' + '<br/>' + '<ul>' + '<li>' + 'Package1' + '</li>' + '<li>'+ 'Package2' + '</li>' + '</ul>';
            newdiv.innerHTML = '<a onClick="' + 'showInfo(' + pWindow + ')' + '"' + ' ' + 'href="#' + '"' + 'class="' + 'pop' + '"' + '>' + 'showpopup' + '</a>';

            container.appendChild(newdiv);
            container.appendChild(icn);
            container.appendChild(newpara);
            box.appendChild(container);
            $(".pop").colorbox({width:"50%", inline:true, href:"#affInfo"});
        }
    } else {
// else tell the user no matches were found
        document.getElementById('error').innerHTML = 'No results found for '+searchterm+'!';
    }

}

</script>
</head>
<body>
<div id="wrapper">

    <div id="content">

        <div id="result">

        </div>
    </div>
</div>
<div class="tempBox">
    <div id="affInfo" style='padding:10px; background:#fff;'>

    </div>
</div>

Ответы [ 2 ]

0 голосов
/ 26 августа 2009

Думаю, что при наведении курсора не работает. Вместо этого я могу изменить этот код jquery, используемый для вызова colorbox, чтобы каждый раз указывать на новый div.

$(".pop").colorbox({width:"50%", inline:true, href:"#affInfo"});

В настоящее время он указывает на скрытый div (#affInfo), вместо которого я хочу указать на динамически генерируемые div, такие как # affInfo1, # affInfo2 и т. Д., И связать его с событием onclick в виде миниатюры.

0 голосов
/ 25 августа 2009

Вам следует переписать его только с помощью jQuery, вы бы сократили его как минимум на 2/3 ...

Если я правильно понял, тег привязки динамически добавляется на страницу вместе с миниатюрой, и вы хотите, чтобы при его появлении событие mouseover добавляло новый DIV в некоторый существующий элемент DOM (назовем его myDOMEle). Я не нашел никаких следов привязки в вашем коде, но не посмотрел глубоко. Что-то вроде $("a").mouseover(function(){ $(myDOMEle).append(myNewContent); }); должно работать, если вы вызываете его после появления каждого нового эскиза.

Вы также можете установить его в качестве функции обратного вызова для функции миниатюр.

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

...