Предотвратите выбор, выпадающий, чтобы открыть, но позволить его событиям стрелять

Есть ли какой-либо способ, которым я могу захватить события выбора HTML и предотвратить выбор HTML, выпадающий для открытия? (Отключение выбора HTML исключено, так как события будут отключены также.)

5
задан lulalala 6 March 2013 в 04:26
поделиться

5 ответов

Это не отключает «раскрывающийся список для открытия», но если вы не хотите, чтобы что-либо выбиралось, я использовал трюк, чтобы сделать вместо вариант . Однако я не понимаю, почему вы хотите отключить раскрывающийся список, но отключить его нельзя ...

1
ответ дан 14 December 2019 в 13:38
поделиться

Я сомневаюсь, что это действительно предотвратит его открытие, но это гарантирует, что 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>
3
ответ дан 14 December 2019 в 13:38
поделиться

Это очень легко сделать с помощью 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 .


Final Code

//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 для округления TimeSpan.TotalDays, чтобы вы начали отсчет дней.
  • Часть дня - вы можете просто вернуть TimeSpan.TotalDays (без округления) в виде десятичного числа (в двойном типе данных)
  • Ничего - вы можете игнорировать эту часть дня и просто верните TimeSpan.Days.

Вот примеры кода для вышеперечисленного:

Подсчет как полный день (с использованием 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 (), вместо этого оставаясь в десятичной форме как часть дня):

1
ответ дан 14 December 2019 в 13:38
поделиться

, я поддерживаю то, что говорит Майлз: Вы надеетесь, что найдете эти ссылки полезными:

Делаем пользовательские дроуд-дауны. http://jonathan.tang.name/code/jquery_combobox

Демонстрация: http://jonathan.tang.name/files/jquery_combobox/demo.html

1
ответ дан 14 December 2019 в 13:38
поделиться

Вы можете удалить все варианты из раскрывающегося списка или скрыть текущий элемент выбора и замените его пустым.

<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>
0
ответ дан 14 December 2019 в 13:38
поделиться
Другие вопросы по тегам:

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