Элемент, который вы пытались найти, не был в DOM , когда ваш скрипт работал.
Позиция вашего DOM-зависимого скрипта может оказать глубокое влияние на его поведение. Браузеры анализируют HTML-документы сверху донизу. Элементы добавляются в DOM, и сценарии выполняются (как правило), когда они встречаются. Это означает, что порядок имеет значение. Как правило, скрипты не могут найти элементы, которые появляются позже в разметке, потому что эти элементы еще не добавлены в DOM.
Рассмотрим следующую разметку; сценарий # 1 не находит Итак, что вы должны делать? У вас есть несколько вариантов: Переместите свой скрипт дальше по странице, перед закрывающим тегом тела. Организованный таким образом остальная часть документа анализируется до того, как будет выполнен ваш скрипт: Примечание: размещение скриптов внизу как правило, считается лучшей практикой . Отмените свой сценарий до тех пор, пока DOM не будет полностью проанализирован, используя Примечание. Вы можете просто привязать к Делегированные события имеют преимущество в том, что они могут обрабатывать события из элементов-потомков, которые будут добавлены в документ позже. Когда элемент вызывает событие (при условии, что это bubbling g6], и ничто не останавливает его распространение), каждый родитель в родословной этого элемента также получает событие. Это позволяет нам привязать обработчик к существующему элементу и примерным событиям, когда они пузырятся от его потомков ... даже те, которые добавлены после присоединения обработчика. Все, что нам нужно сделать, это проверить событие, чтобы узнать, был ли он поднят нужным элементом и, если да, запустите наш код. jQuery Примечание: Обычно этот шаблон зарезервированы для элементов, которые не существовали во время загрузки или , чтобы избежать прикрепления большого количества обработчиков. Также стоит отметить, что, пока я прикреплял обработчик к Используйте атрибут [ Для справки, вот код из этого внешнего скрипта : Примечание: атрибут
Вариант 1: Переместите свой скрипт
Вариант 2: jQuery's
ready()
ready()
:
DOMContentLoaded
или window.onload
, но у каждого есть свои оговорки. jQuery ready()
предоставляет гибридное решение. Вариант 3: Делегирование событий
on()
выполняет эту логику для нас. Мы просто предоставляем имя события, селектор для желаемого потомка и обработчик событий:
document
(для демонстрационных целей), вы должны выбрать ближайшего надежного предка. Вариант 4: Атрибут
defer
defer
в .
defer
, логический атрибут] установлен для указания на браузера, который должен выполняться после того, как документ был проанализирован.
document.getElementById("test").addEventListener("click", function(e){
console.log("clicked: %o", this);
});
defer
, безусловно, кажется , как волшебная пуля , но важно знать об оговорках ... 1. defer
может использоваться только для внешних скриптов, т. е. для тех, у кого есть атрибут src
. 2. знать о поддержке браузера , то есть: ошибка реализации в IE & lt; 10
Я думаю, что Вы должны будете к p/invoke к API окон смочь играть файлы midi от .NET.
Эта codeproject статья делает хорошее задание при объяснении, как сделать это: статья vb.net для проигрывания файлов midi
Для перезаписи это - c#, Вам был бы нужен следующий оператор импорта для mciSendString:
[DllImport("winmm.dll")]
static extern Int32 mciSendString(String command, StringBuilder buffer,
Int32 bufferSize, IntPtr hwndCallback);
Hope это помогает - удачи!
Я работаю над приложением MIDI C# в данный момент, и другие правы - необходимо использовать p/invoke для этого. Я прокручиваю свое собственное, поскольку это казалось более подходящим для приложения (мне только нужно небольшое подмножество функциональности MIDI), но в Ваших целях Инструментарий MIDI C# мог бы быть лучшим соответствием. Это - по крайней мере, лучшая библиотека MIDI.NET, которую я нашел, и я искал экстенсивно прежде, чем запустить проект.
Я не могу утверждать, что знал много об этом, но я не думаю, что случается так, что простой - Carl Franklin известность DotNetRocks сделала немного с ним - Вы видели его DNRTV?
Система. Медиа. SoundPlayer является хорошим, простым способом играть файлы WAV. Файлы WAV имеют некоторые преимущества перед MIDI, одним из них являющийся этим, можно управлять точно что каждый инструментальные звуки как (вместо того, чтобы полагаться на встроенный синтезатор компьютера).