Отображение, какой идентификатор отсутствует - PullRequest
1 голос
/ 13 декабря 2011

У меня проблемы с тем, чтобы одни и те же веб-приложения работали для разных версий Firefox:

var col = [{'id': 'id1'}, {'id': 'id2'}, {'id': 'id3'},{'id': 'id4'},
                {'id': 'id5'}, {'id': 'id6'}, {'id': 'id7'}, {'id': 'id8'}];
doSomething(col);

если id5 не существует, моя страница отображается нормально в FF8, но в FF 3.5 это не так.

Есть ли способ сообщить или проверить, когда идентификатор не существует, и отобразить его имя (потому что даже в консоли браузера не отображается, какой идентификатор)?

РЕДАКТИРОВАТЬ

var col = [{'id': 'id1'}, {'id': 'id2'}, {'id': 'id3'},{'id': 'id4'},
                    {'id': 'id5'}, {'id': 'id6'}, {'id': 'id7'}, {'id': 'id8'}];
     YAHOO.util.Dom.batch(col, desactivateBtn );

    var desactivateBtn = function(btn){
            YAHOO.widget.Button.getButton(btn.id)._setDisabled(true);
    };

Я использую YUI и YAHOO.util.Dom.batch просто так, что он применяет desactivateBtn ко всем кнопкам с идентификаторами в col (это похоже на метод $.each в jQuery)

Спасибо

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Вы пытаетесь получить доступ к свойству или методу для элемента, который не найден.

Изменение:

 var desactivateBtn = function(btn){
       YAHOO.widget.Button.getButton(btn.id)._setDisabled(true);
   };

Кому:

 var desactivateBtn = function(btn){
       var elem = YAHOO.widget.Button.getButton(btn.id);
       if(elem) elem._setDisabled(true);
   };

Я столкнулся с подобной проблемой при глотании IE, что другие браузеры сочли бы исключением. Проблема возникла из-за использования eval (это был устаревший код, не написанный мной). Я не смотрел библиотеку YAHOO, но мне интересно, если метод getButton использует eval для внутреннего использования?

edit: Если вы хотите отобразить, какие элементы отсутствуют, нет простого способа сделать это в браузерах, поскольку в IE8 нет console.log. Вы можете записать вывод в элемент отладки div или предупредить сообщение. Я бы, наверное, пошел с элементом debug div.

var DEBUG = true;
window.DEBUG_OUTPUT = null;

if(DEBUG) {
   window.DEBUG_OUTPUT = /* create div, append to whatever element */
}

Затем вы можете изменить свою функцию на что-то вроде:

var desactivateBtn = function(btn){
    var elem = YAHOO.widget.Button.getButton(btn.id);
    if(elem) { elem._setDisabled(true); }
    else { window.DEBUG_OUTPUT.innerHTML = window.DEBUG_OUTPUT.innerHTML + ('' + btn.id);
};

Несколько вещей на заметку:

  1. Мне не нравится добавление к объекту window, но для консоли / отладки я думаю, что все в порядке.
  2. У меня есть ('' + btn.id), чтобы привести нестроковые идентификаторы (например, 1, 2 и т. Д.) К строкам. Я не уверен, что это проблема, но я давно столкнулся с ошибкой в ​​каком-то браузере, что установка innerHTML = 3 приведет к ошибке, поскольку 3 не является строкой. У меня не было времени проверить, является ли это проблемой в любом из основных браузеров.

edit2: еще лучше, оберните btn.id в <p></p> теги.

2 голосов
/ 13 декабря 2011

Проверить наличие недостающих элементов можно с помощью:

  if (document.getElementById(idValue) === null) {
    console.log("Element " + idValue + " not found");
  }
  else {
    // doSomething ...
  }
1 голос
/ 13 декабря 2011

Вы можете использовать свойство length коллекции jQuery, возвращаемой вашим селектором:

if ( $('#field_id').length ) // element exist
{
             // do something
}else{
             // do some other thing
}

это лучший способ проверить существование идентификатора. потому что length неявно проверяет null и undefined и не выдает ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...