Я считаю, что интеграционные тесты заметно превосходят модульные тесты. Если я тестирую мой код модулем, я проверяю только то, что он делает, и мое понимание того, что он должен делать. Это только ловит ошибки реализации. Но часто гораздо большей проблемой являются ошибки понимания. Интеграционные тесты ловят оба.
Кроме того, существует существенная разница в стоимости; если вы интенсивно используете модульные тесты, они нередко перевешивают весь остальной код вместе взятый. И их нужно поддерживать, как и весь остальной код. Интеграционные тесты значительно дешевле - и в большинстве случаев они вам уже нужны.
В редких случаях может возникнуть необходимость использовать модульные тесты, например, для внутренних путей обработки ошибок, которые не могут быть запущены, если остальная часть системы работает правильно, но в большинстве случаев одни только интеграционные тесты дают лучшие результаты при значительно более низкой стоимости.
Чтобы расширить предложение Винсента Рамдхани , попробуйте сделать что-то вроде этого. По сути, в результате вы получите свою собственную функцию 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() {......});
Если функция размытия не работает для вас, я бы добавил кнопку обновления или что-то еще для этого эффекта, который запускает функцию, которую вы пытаетесь использовать.
Просто подключите обработчики событий щелчка к вложенным элементам управления параметрами вместо выбора:
$('#dropdownid option').click(function() {......});
Это сработает только при выборе параметра из раскрывающегося списка, независимо от того, изменяется ли он.
Согласно API :
Событие изменения срабатывает, когда элемент управления теряет фокус ввода и его значение был изменен с момента получения фокуса.
В качестве альтернативы вы можете попробовать mousedown или события щелчка.
Попробуйте следующее:
$(document).ready(function(){
var clicknum = 0;
$("#dropdownid").click(function(){
clicknum++;
if(clicknum == 2){
alert($(this).val());
clicknum = 0;
}
});
});
Сначала вы создаете переменную clicknum для отслеживания количества кликов, потому что вы не хотите, чтобы событие запускалось каждый раз, когда пользователь щелкает раскрывающийся список. Второй щелчок - это выбор, который делает пользователь.
Если click num оказывается равным 2, то это второй щелчок, поэтому запустите событие и сбросьте clicknum на 0 в следующий раз. В противном случае ничего не делайте.
Эта проблема возникает из-за того, что клиент обрабатывает базовый HTML-код выбора. Поскольку большинство клиентов не собираются отмечать отсутствие изменений, вам придется попробовать что-то другое.
Я бы, наверное, добавил кнопку «Обновить» или что-то в этом роде, но я разработчик, а не дизайнер, поэтому я, вероятно, ошибаюсь. :)
Выбранный элемент раскрывающегося списка отражает уже сделанный выбор.
Я предлагаю каждый раз сбрасывать раскрывающийся список на значение по умолчанию, например "Выбрать ..." требуемое действие выполнено. Таким образом, если пользователю необходимо выполнить действие A дважды, раскрывающийся список будет сбрасываться после каждого действия.
Надеюсь, это поможет,
Рич
Проверьте это решение:
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");
}
});
});
});
Надеюсь, это поможет
.