Есть ли какой-либо способ, которым я могу захватить события выбора HTML и предотвратить выбор HTML, выпадающий для открытия? (Отключение выбора HTML исключено, так как события будут отключены также.)
Это не отключает «раскрывающийся список для открытия», но если вы не хотите, чтобы что-либо выбиралось, я использовал трюк, чтобы сделать
вместо вариант
. Однако я не понимаю, почему вы хотите отключить раскрывающийся список, но отключить его нельзя ...
Я сомневаюсь, что это действительно предотвратит его открытие, но это гарантирует, что DropDown всегда будет поддерживать одно и то же значение:
<select name="theselect" onchange="this.selectedIndex = 1;">
<option value="Red">Red</option>
<option value="Green" selected="selected">Green</option>
<option value="Blue">Blue</option>
</select>
Это очень легко сделать с помощью C #. Для сравнения DateTimes у нас есть класс TimeSpan . Структура TimeSpan в этом случае будет определяться как разница между двумя вашими датами .
Допустим, ваши DateTimes называются start и end.
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
Мы установили наши DateTimes до 14 июня. , 2009 и 14 декабря 2009.
Теперь давайте найдем разницу между ними. Для этого мы создаем TimeSpan:
TimeSpan difference = end - start;
С помощью этого объекта TimeSpan вы можете выразить разницу во времени разными способами. Однако вы специально запросили разницу в днях, поэтому вот как вы можете это получить:
Console.WriteLine("Difference in days: " + difference.Days);
Таким образом, свойство называется TimeSpan.Days .
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
Console.WriteLine("Difference in days: " + difference.Days); //Extract days, write to Console.
Дополнительные сведения о используя структуру TimeSpan, см. эту документацию MSDN (особенно примеры C #).
Надеюсь, я помог!
ОБНОВЛЕНИЕ: В некоторых ответах предлагалось выполнить вычитание за один шаг, например:
int days = (dt2 - dt1).Days;
или
int numDaysDiff = Math.Abs(date2.Subtract(date1).Days);
Однако это то же самое, что и в моем ответе, только сокращенно. Это связано с тем, что метод DateTime.Subtract () и оператор вычитания DateTimes возвращают TimeSpan , из которого затем можно получить доступ к количеству дней. Я специально использовал более длинный подход в моем примере кода, чтобы вы четко понимали, что происходит между вашими объектами DateTime и TimeSpan и как все это работает. Конечно, другие подходы, о которых я только что упомянул, тоже хороши.
ОБНОВЛЕНИЕ №2:
Очень похожий вопрос был задан ранее, и его можно найти здесь . Однако, Суть этого вопроса заключалась в том, почему образец кода (который по сути эквивалентен образцу всех ответов) иногда дает ответ, который является выходным днем. Я думаю, что это также важно для этого вопроса.
Как следует из основного ответа на другой вопрос, вы можете использовать этот код:
int days = (int)Math.Ceiling(difference.TotalDays);
В этом коде используется Math.Ceiling, который, согласно MSDN, равен:
Возвращает наименьшее целое значение. что больше или равно указанная двойная точность число с плавающей запятой.
Таким образом, теперь у нас возникла проблема с тем, как вы хотите считать дни . Вы хотите считать часть дня (например, 0,5 дня) как:
Вот примеры кода для вышеперечисленного:
Подсчет как полный день (с использованием Math.Ceiling () для округления):
//establish DateTimes
DateTime start = new DateTime(2009, 6, 14);
DateTime end = new DateTime(2009, 12, 14);
TimeSpan difference = end - start; //create TimeSpan object
int days = (int)Math.Ceiling(difference.TotalDays); //Extract days, counting parts of a day as a full day (rounding up).
Console.WriteLine("Difference in days: " + days); //Write to Console.
Подсчет как часть день (НЕ используется Math.Ceiling (), вместо этого оставаясь в десятичной форме как часть дня):
, я поддерживаю то, что говорит Майлз: Вы надеетесь, что найдете эти ссылки полезными:
Делаем пользовательские дроуд-дауны. http://jonathan.tang.name/code/jquery_combobox
Демонстрация: http://jonathan.tang.name/files/jquery_combobox/demo.html
Вы можете удалить все варианты из раскрывающегося списка или скрыть текущий элемент выбора и замените его пустым.
<select id="main">
<option name="1">1</option>
<option name="2">2</option>
<option name="3">3</option>
</select>
<select id="empty" style="display:none;">
</select>
<script>
function disableSelect() {
document.getElementById('main').style.display = 'none';
document.getElementById('main').style.display = '';
}
</style>