Как Вы определяете тип среды в JavaScript?

@Kaiido прав, здесь resolve вызывается в цикле for, который находится повсюду и до того, как весь код завершится. Любая ошибка после этой точки в основном теряется.

Это анти-шаблон конструктора обещаний . Вкратце: не пишите код приложения внутри конструкторов обещаний. Не передавайте функции resolve и reject вниз. Вместо этого позвольте функциям возвращать обещания до вас и добавьте к ним весь код приложения в then обратных вызовов. Затем верните все обещания, чтобы они образовали единую цепочку. Только тогда ошибки распространяются правильно.

См. Использование обещаний в MDN для получения дополнительной информации.

15
задан Phantom Watson 30 January 2009 в 02:07
поделиться

5 ответов

[..], Прототип не позволит элементу быть переключенным на видимый, если он был объявлен невидимый (display: none) с невстроенным CSS. Это - что-то, что я не понял и постоянно раздражен. Любой, который может обеспечить любое понимание его, получает большой upvote от меня.

Вы, вероятно, уже замеченный это, но документация для, например. show (существуют другие связанные функции с тем же примечанием), указывает что:

Element.show не могут элементы отображения, скрытые с помощью таблиц стилей CSS. Обратите внимание, что это не Опытное ограничение, а последствие как CSS display работы свойства.

Так, это - известная проблема, и они обвиняют CSS. Однако рассмотрите следующий документ (я не использовал Прототип прежде, таким образом, я не уверен - ли это рекомендуемый способ ожидать DOM для загрузки, но это, кажется, работает):

<!doctype html>
<script src="prototype.js"></script>
<script>
document.observe("dom:loaded", function() {
  $("victim").show();
});
</script>
<style>
p#victim {display:none;}
</style>
<p id="victim">Hello world!

Как Вы уже знаете, это не будет работать. Почему? Ну, как Моделировал бы, знают, что "сбросить" display свойство к тому, когда Вы говорите p#victim кому: show самостоятельно? (Другими словами: как может он узнавать то, что должно было быть значением display если display: none не присутствовал в ruleset с p#victim селектор.) Ответ прост: это не может. (Думайте об этом в течение секунды. Что, если другой ruleset изменил бы значение display если display: none не присутствовал в нашем ruleset с p#victim селектор? (Т.е. мы не можем принять это, например. p всегда должен устанавливаться на block, другой rulesets, возможно, изменил то значение.) Мы не можем удалить display свойство от ruleset в таблице стилей, и мы не можем удалить все соединение между элементом и ruleset, потому что это может содержать другие свойства и так далее (даже если бы было бы возможно, что было бы, по моему скромному мнению, неочевидно найти который ruleset сделать это с). Конечно, мы могли продолжить и на это, но afaik, там не известное решение этой проблемы.)

Затем, почему встроенная альтернатива работает? Во-первых, позволяет взгляду на как show реализован:

show: function(element) {
  element = $(element);
  element.style.display = ''; // <-- the important line
  return element;
}

Afaict единственная важная вещь, которую делает эта функция, должен установить element.style.display к пустой строке (''), который "удаляет" display от style.Отлично! Но что это означает? Почему мы хотели бы удалить его?! Сначала мы должны узнать что element.style на самом деле представляет и изменяет, когда мы изменяем его значения.

Документация MDC для element.style состояния, что:

Возвращает объект, который представляет элемент style атрибут.

Отметьте последнее слово: атрибут. element.style ≠ текущий "расчетный" стиль для элемента, это - просто список свойств в style атрибут (см. MDC для более длинного/лучше объяснения).

Рассмотрите следующий документ:

<!doctype html>
<script src="prototype.js"></script>
<script>
document.observe("dom:loaded", function() {
  $("victim").show();
});
</script>
<p id="victim" style="display:none;">Hello world!

style="display:none;" скрывается p#victim но когда DOM заканчивают загружаться, Прототип изменит его на style="", и браузер повторно вычислит значение для display свойство (значение из таблицы стилей браузера по умолчанию в этом случае).

Но, рассмотрите следующий документ:

<!doctype html>
<script src="jquery.js"></script>
<script>
$(document).ready(function(){
  $("#victim").show();
});
</script>
<style>
p#victim {display:none;}
</style>
<p id="victim">Hello world!

jQuery обрабатывает материал таблиц стилей правильно, в этом случае так или иначе! Это не столь просто объяснить как Опытное решение и существует ко многим слоям великолепия для меня для прочтения прямо сейчас, и существует много случаев, где jQuery не удается вычислить правильное значение для display . (Быстрое последнее примечание: Firebug..., но я предполагаю, что он использует некоторый Firefox эксклюзивный материал или что-то.)

4
ответ дан 1 December 2019 в 05:16
поделиться

Править: Извините (Отмечают к сам: RTFQ Грабят, sheesh!). Быстрый поиск с помощью Google покрыл дерном это и плагин jQuery, если это - какое-либо использование. Это в основном использует правила @media, но не встроенное насколько я могу сказать, таким образом, Ваша поддержка браузера может варьироваться, но лучше, чтобы можно было надеяться, поскольку я думаю :(

1
ответ дан 1 December 2019 в 05:16
поделиться

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

От этого сайта: http://www.webdeveloper.com/forum/showthread.php?t=82453

IE:

if (document.styleSheets[0].media == 'screen'){...}

FF/NS:

document.getElementsByTagName ('LINK')[0].getAttribute ('media')

или

document.styleSheets[0].media.mediaText

и сценарий, чтобы проверить его во все браузеры (за исключением некоторых новых, так быть осторожным :))

http://student.agh.edu.pl/~marcinw/cssmedia/

этот сценарий работает в операторе "if" истинной/ложной булевской переменной! Надежда Вы заставите это работать!

1
ответ дан 1 December 2019 в 05:16
поделиться
document.getElementsByTagName('link').each(function( link )
{
  //do something with link.media
  //hide whatever you need to hide, etc
});
0
ответ дан 1 December 2019 в 05:16
поделиться

Я протестировал свой упомянутый выше сценарий - он теперь работает со всеми новыми браузерами, включая финал IE8.

Сценарий переехал сюда: http://cssmedia.pemor.pl/ Не стесняется использовать его, если только Вы хотите.

С отношениями Marcin Wiazowski

0
ответ дан 1 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: