Событие огня каждый раз объект DropDownList выбрано с jQuery

Я считаю, что интеграционные тесты заметно превосходят модульные тесты. Если я тестирую мой код модулем, я проверяю только то, что он делает, и мое понимание того, что он должен делать. Это только ловит ошибки реализации. Но часто гораздо большей проблемой являются ошибки понимания. Интеграционные тесты ловят оба.

Кроме того, существует существенная разница в стоимости; если вы интенсивно используете модульные тесты, они нередко перевешивают весь остальной код вместе взятый. И их нужно поддерживать, как и весь остальной код. Интеграционные тесты значительно дешевле - и в большинстве случаев они вам уже нужны.

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

34
задан Derek S 30 April 2014 в 20:27
поделиться

7 ответов

Чтобы расширить предложение Винсента Рамдхани , попробуйте сделать что-то вроде этого. По сути, в результате вы получите свою собственную функцию 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() {......});

Если функция размытия не работает для вас, я бы добавил кнопку обновления или что-то еще для этого эффекта, который запускает функцию, которую вы пытаетесь использовать.

s файл используется для использования:

<script src="Scripts/jqDropDown.js" type="text/javascript"></script>

Шаг 3 : Используйте новую функцию:

$('#MyDropDown').selected(function() {
    //Do Whatever...
});

ОРИГИНАЛЬНАЯ ИНФОРМАЦИЯ
С вашей текущей кодовой базой выбор того же значения из asp: DropDownList не вызовет событие изменения.

Вы можете попробовать добавить другую функцию jQuery для события .blur. Это сработает, когда элемент управления теряет фокус:

$('#dropdownid').blur(function() {......});

Если функция размытия не работает для вас, я бы добавил кнопку обновления или что-то еще для этого эффекта, который запускает функцию, которую вы пытаетесь использовать.

s файл используется для использования:

<script src="Scripts/jqDropDown.js" type="text/javascript"></script>

Шаг 3 : Используйте новую функцию:

$('#MyDropDown').selected(function() {
    //Do Whatever...
});

ОРИГИНАЛЬНАЯ ИНФОРМАЦИЯ
С вашей текущей кодовой базой выбор того же значения из asp: DropDownList не вызовет событие изменения.

Вы можете попробовать добавить другую функцию jQuery для события .blur. Это сработает, когда элемент управления теряет фокус:

$('#dropdownid').blur(function() {......});

Если функция размытия не работает для вас, я бы добавил кнопку обновления или что-то еще для этого эффекта, который запускает функцию, которую вы пытаетесь использовать.

28
ответ дан 27 November 2019 в 16:52
поделиться

Просто подключите обработчики событий щелчка к вложенным элементам управления параметрами вместо выбора:

$('#dropdownid option').click(function() {......});

Это сработает только при выборе параметра из раскрывающегося списка, независимо от того, изменяется ли он.

7
ответ дан 27 November 2019 в 16:52
поделиться

Согласно API :

Событие изменения срабатывает, когда элемент управления теряет фокус ввода и его значение был изменен с момента получения фокуса.

В качестве альтернативы вы можете попробовать mousedown или события щелчка.

3
ответ дан 27 November 2019 в 16:52
поделиться

Попробуйте следующее:

$(document).ready(function(){
 var clicknum = 0;
 $("#dropdownid").click(function(){
    clicknum++;
    if(clicknum == 2){
        alert($(this).val());
        clicknum = 0;
    }
 });
});

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

Если click num оказывается равным 2, то это второй щелчок, поэтому запустите событие и сбросьте clicknum на 0 в следующий раз. В противном случае ничего не делайте.

16
ответ дан 27 November 2019 в 16:52
поделиться

Эта проблема возникает из-за того, что клиент обрабатывает базовый HTML-код выбора. Поскольку большинство клиентов не собираются отмечать отсутствие изменений, вам придется попробовать что-то другое.

Я бы, наверное, добавил кнопку «Обновить» или что-то в этом роде, но я разработчик, а не дизайнер, поэтому я, вероятно, ошибаюсь. :)

0
ответ дан 27 November 2019 в 16:52
поделиться

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

Я предлагаю каждый раз сбрасывать раскрывающийся список на значение по умолчанию, например "Выбрать ..." требуемое действие выполнено. Таким образом, если пользователю необходимо выполнить действие A дважды, раскрывающийся список будет сбрасываться после каждого действия.

  1. Пользователь выбирает действие A из раскрывающегося списка.
  2. Действие A выполняется, а раскрывающийся список сбрасывается.
  3. Пользователь выбирает действие A из раскрывающегося списка.
  4. Действие A выполняется, раскрывающийся список сбрасывается.

Надеюсь, это поможет,

Рич

0
ответ дан 27 November 2019 в 16:52
поделиться

Проверьте это решение:
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");
            }
        });
    });
});

Надеюсь, это поможет

.
2
ответ дан 27 November 2019 в 16:52
поделиться
Другие вопросы по тегам:

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