Событие Fire каждый раз, когда элемент DropDownList выбран с помощью jQuery
У меня выпадающее меню: <asp:DropDownList id="dropdownid" runat="server" class=blah"/>
в моем jQuery, я назначаю событие изменения следующим образом:
$('#dropdownid').change(function() {......});
Теперь это работает, когда я выбираю другое значение из раскрывающегося списка, однако, допустим, я хочу снова выбрать одно и то же значение. (потому что я хочу сделать другой вызов с тем же значением)
Поэтому, когда я выбираю его снова (без изменения значения), просто нажимая на выбранное значение из выпадающего меню и "выбрав" его снова, никакое событие не срабатывает.
Есть ли другое событие в jquery, которое мне нужно назначить? какой обходной путь?
Ответы
Ответ 1
Чтобы развернуть предложение Vincent Ramdhanie, взгляните на это. По сути, вы получаете свою собственную функцию jQuery, которую вы можете повторно использовать в другом месте.
Шаг 1: создайте функцию jQuery
(function($) {
$.fn.selected = function(fn) {
return this.each(function() {
var clicknum = 0;
$(this).click(function() {
clicknum++;
if (clicknum == 2) {
clicknum = 0;
fn(this);
}
});
});
}
})(jQuery);
Шаг 2. Убедитесь, что для вновь созданного файла функции jQuery ссылка используется:
<script src="Scripts/jqDropDown.js" type="text/javascript"></script>
Шаг 3. Используйте новую функцию:
$('#MyDropDown').selected(function() {
//Do Whatever...
});
ОРИГИНАЛЬНАЯ ИНФОРМАЦИЯ
С вашей текущей базой кода, выбрав одно из значений asp: DropDownList не будет запускать событие изменения.
Вы можете попробовать добавить еще одну функцию jQuery для события .blur. Это срабатывает, когда управление теряет фокус:
$('#dropdownid').blur(function() {......});
Если функция размытия не работает для вас, я бы добавил кнопку обновления или что-то подобное, что вызывает функцию, которую вы пытаетесь использовать.
Ответ 2
Попробуйте следующее:
$(document).ready(function(){
var clicknum = 0;
$("#dropdownid").click(function(){
clicknum++;
if(clicknum == 2){
alert($(this).val());
clicknum = 0;
}
});
});
Сначала вы создаете переменную clicknum для отслеживания количества кликов, потому что вы не хотите, чтобы событие срабатывало при каждом нажатии пользователем выпадающего списка. Второй щелчок - это выбор, который делает пользователь.
Если щелчок num окажется равным 2, то это второй щелчок, чтобы запустить событие и reset clicknum в 0 в следующий раз. В противном случае ничего не делать.
Ответ 3
Просто подключайте обработчики событий подключений к закрытым элементам управления, а не выберите:
$('#dropdownid option').click(function() {......});
Это будет срабатывать только при выборе опции из выпадающего меню, независимо от того, изменяется ли она.
Ответ 4
В соответствии с API:
Событие изменения срабатывает, когда элемент управления теряет фокус ввода и его значение был изменен с момента получения фокуса.
В качестве альтернативы вы можете попробовать использовать mousedown или click events.
Ответ 5
Многие текущие решения будут ломаться во многих ситуациях. Любое решение, которое полагается на проверку количества кликов дважды, будет очень изменчивым.
Некоторые сценарии, которые следует учитывать:
- Если вы нажмете, затем выключите, затем снова включите, он будет считать как клики, так и огонь.
- В firefox вы можете открыть меню одним щелчком мыши и перетащить на выбранный вариант, не поднимая при этом свою мышь.
- Если вы используете какую-либо комбинацию штрихов клавиатуры, вы, скорее всего, получите счетчик кликов вне синхронизации или вообще пропустите событие изменения.
- Вы можете открыть раскрывающийся список с помощью Alt + ↕ (или Spacebar в Chrome и Opera).
- Когда выпадающая панель имеет фокус, любая из клавиш со стрелками изменяет выделение
- Когда раскрывающееся меню открыто, нажатие Tab или Enter сделает выбор
Здесь более полное расширение:
Самый надежный способ увидеть, была ли выбрана опция, - использовать change
событие, с которым вы можете работать с jQuery .change()
обработчик.
Единственное, что нужно сделать, это определить, был ли снова выбран исходный элемент.
Это было задано много (один, два, три) без особого ответа в любой ситуации.
Простейшей задачей было бы проверить, было ли событие click
или keyup
в элементе option:selected
НО Chrome, IE и сафари, похоже, не поддерживают события на option
элементах, хотя они находятся в Рекомендация w3c
Внутри элемента Select
, кажется, черный ящик. Если вы слушаете события на нем, вы даже не можете указать, на каком элементе произошло событие или открыт ли список.
Следующая лучшая вещь, похоже, обрабатывает событие blur
. Это будет означать, что пользователь сосредоточился на выпадающем списке (возможно, видел список, возможно, нет) и принял решение, что они хотели бы придерживаться первоначального значения. Чтобы продолжить обработку изменений, мы все равно будем подписываться на событие change
. И чтобы убедиться, что мы не умножим счет, мы установим флаг, если событие изменения было поднято, поэтому мы не возвращаемся дважды:
Код:
(function ($) {
$.fn.selected = function (fn) {
return this.each(function () {
$(this).focus(function () {
this.dataChanged = false;
}).change(function () {
this.dataChanged = true;
fn(this);
}).blur(function (e) {
if (!this.dataChanged) {
fn(this);
}
});
});
};
})(jQuery);
Затем назовите это:
$("#dropdownid").selected(function (e) {
alert('You selected ' + $(e).val());
});
Ответ 6
Посмотрите это решение:
http://ledomoon.blogspot.com/2009/12/dropdown-selected-change-event-by.html
$(document).ready(function () {
// select all the divs and make it invisible
$("div.Content").css("display", "none");
// Find all the combos inside the table or gridview
$("#tblItems").find("select.Status").each(function () {
// Attached function to the change event of each combo
$(this).change(function () {
if ($(this).val() == "test1") {
// Change the visibility of the next div after the selected combo if the selected value = test1
$(this).parent().find("div.Content").fadeIn("slow"); //css("display","block");
} else {
$(this).parent().find("div.Content").fadeOut("slow"); //.css("display","none");
}
});
});
});
Надеюсь, что это поможет
Ответ 7
Эта проблема возникает из-за обработки клиентом базового HTML-кода. Поскольку большинство клиентов не собираются отмечать не изменения, вам придется попробовать что-то другое.
Возможно, я добавлю кнопку "Обновить" или что-то в этом роде, но я разработчик, а не дизайнер, поэтому я, вероятно, ошибаюсь.:)
Ответ 8
Выбранный элемент выпадающего списка должен отображать уже сделанный выбор.
Мое предложение состоит в reset выпадающем списке по умолчанию, например "Выбрать...", каждый раз, когда требуемое действие завершено. Итак, если пользователю необходимо выполнить Action A дважды, выпадающее меню будет reset после каждого действия.
- Пользователь выбирает действие A из раскрывающегося списка.
- Действие A выполняется, а выпадающее меню reset.
- Пользователь выбирает действие A из раскрывающегося списка.
- Действие A выполняется, а выпадающее меню reset.
Надеюсь, что это поможет,
Рич
Ответ 9
Для меня следующее решение отлично работало:
$("#dropdownid select").click(function() {
alert($("#dropdownid select option:selected").html());
});
Ответ 10
также:
$('#dropdownid select option').click(function() {
....
}