Javascript, Jquery, Кросс-браузерные проблемы, разочарование - PullRequest
4 голосов
/ 01 апреля 2012

Я в основном разработчик PHP. Я понимаю, что в наши дни специализация на одном языке сценариев не сокращает его, но факт остается фактом, что мои навыки в JavaScript и jQuery довольно зеленые. Я новичок в лучшем случае. Я могу создать свой собственный код, но совместимость с несколькими браузерами остается большой проблемой при работе с JavaScript.

В любом случае, у меня есть скрипт, который фильтрует товары по категориям / подкатегориям. Вот как это работает: вы выбираете категорию, а javascript в фоновом режиме делает свое дело, чтобы отфильтровать подкатегории так, чтобы отображаемые параметры относились к родительской категории - комбинация этих двух фильтров линейки продуктов.

Вот мой код:

function scategories(){

    //get the category option value from the category drop down bar
    var cat = (document.getElementById('categories').value);

    //get all the options from the subcategory drop down bar
    var subcat = document.getElementsByClassName('subcategories');

    var n=0;

    //if the category bar option is set to 0 display everything
    if(Number(cat)==0){
        Show(); 
    }

    //filter the subcategories
    while(subcat.item(n)){

        //if there is no match b/w the subcategories option and the categories id FILTER
        if(Number((subcat.item(n).value).split('|')[1]) != Number(cat) && Number(subcat.item(n).value) != 0){
            document.getElementsByClassName('subcategories')
                .item(n)
                .style
                .display="none";    
        }else{

            //else display the subcategory
            document.getElementsByClassName('subcategories')
                .item(n)
                .style
                .display="list-item";   
        }
        n++;
    }   
}

Этот код довольно понятен, я бы сказал. У меня также есть функция shiftfocus, которая перемещает фокус с текущей опции, выбранной в подкатегории, на настройку по умолчанию, которая равна 'none', когда выбирается новая категория. Это в основном сбрасывает подкатегорию .. вот код:

    function shiftfocus(){
        document.getElementsByClassName('subcategories')
            .item(0)
            .removeAttribute("selected");
        document.getElementsByClassName('subcategories')
            .item(0)
            .setAttribute("selected","selected");
    }

Shiftfocus называется onChange, а категории - onClick.

Задача 1: 1) Firefox: Shiftfocus не смещает фокус на параметр по умолчанию, хотя я вижу, что он добавляет атрибут «selected».

2) Safari: вообще не работает.


РЕДАКТИРОВАТЬ: Проблема 2 была продуктом небрежной ошибки. Я оставил открытым тег привязки, который был создавая хаос в IE. Должен был дважды проверить, прежде чем беспокоить вас ребята. Сожалею. Проблема 1 все еще сохраняется.


Задача 2: Я не понимаю ни одного из нас, разработчиков, особенно, как интернет-исследователь. Но я готов поверить, что допустил здесь ошибку. У меня есть некоторый jQuery, который выбирает данные из скрипта в другом файле через встроенную функцию POST и добавляет его в таблицу с идентификатором «content». Это прекрасно работает на всех браузерах, кроме IE. Если я попытаюсь вернуться в режим совместимости с IE 7,8, результаты получатся немного лучше (хотя данные разбиты на части), а в режиме совместимости с IE9 ничего не добавится! Вот код:

$.post("bagcontents.php", { 
    "Bid": $(this).attr('bid')
},
function(data){
    $("#content").empty().append(data);
    roundNumber();
    $('#processorder_hidden').attr('value',currentBid);
});


//append here
<div id="contents" style="overflow:auto;height:345px;padding-right:5px;">
    <form name="bag_contents" id="bag_contents" method="post" action="<?php _page ;?>">
        <table id="content">
        </table>           
        <input type="hidden" id="bag_contents_hidden" name="bag_contents_hidden" value="1" />       
    </form>
</div>

Любая помощь будет оценена. Я попытался вывести извлеченные результаты с помощью alert, alert (data), и скрипт получает все просто. Это просто часть добавления, которая терпит неудачу: |

1 Ответ

3 голосов
/ 01 апреля 2012

Вот несколько предложений и надеюсь, что вы найдете их несколько полезными.

Проблема: 1 Вместо того, чтобы shiftfocus () установил конкретное значение, вы пытались использовать .val ('') только для того, чтобыочистить это.Я могу себе представить, что по умолчанию это будет первый вариант.

Проблема: 2 Это будет трудно отладить, не зная, какие данные возвращаются с сервера.Возможно, неправильное форматирование или какая-то синтаксическая ошибка в отображаемом выводе.

...