Для моего первого приложения ASP.NET MVC 3 я использую jqGrid для отображения табличных данных, связанных с рецептами.Один или несколько рецептов могут быть связаны пользователем.
Когда я выбираю строку в сетке для рецепта, я отображаю некоторые детали об этом рецепте под ним в другом div
, включая названия связанных рецептов.
Если я выделяю / копируюИмя связанного рецепта. Я могу вставить его в поле фильтра для имени рецепта, и оно будет отфильтровано до этого рецепта.То, что я хотел бы сделать, это отобразить ссылку для каждого связанного рецепта, а затем, когда пользователь нажимает на один из связанных рецептов, он, по сути, делает для них эквивалент выделения / копирования / вставки.
Для каждого из имен моих рецептов я делал что-то вроде этого:
<a size="75" class="relatedrecipe" data-recipename="@item.RecipeName">@item.RecipeName</a>
И затем у меня есть некоторый jQuery, который делает это:
$(function () {
$('.relatedrecipe').click(function () {
$('#gs_RecipeName').val($(this).data('recipename'));
});
}
И это, фактически, заполнит этот вводполе (с идентификатором "gs_RecipeName") с именем моего связанного рецепта, но оно не автоматически фильтрует список рецептов в этот момент.Чтобы заставить его работать, я должен нажать на поле и изменить текст, чтобы вызвать это.
Второй выпуск После решения первого вопроса я хочу очистить все существующиеФильтры, которые могут быть установлены (что привело меня к первоначальному рецепту в первую очередь. Я делаю фильтрацию «И», и, если, скажем, рецепт для Шоколадного пирога связан с рецептом для Пеканового пирога, а пользователь ранее фильтровал доПекановый пирог, отфильтровав «Пекан», мой фильтр не будет отображать этот шоколадный пирог, так как в нем нет пеканов. Имеет смысл? Я думаю, что я хочу сделать, это следующее:
- Кликает текст.
- Фильтры очищаются.
- Имя рецепта автоматически заполняется в соответствующем поле фильтра.
- Автоматический выбор отфильтрованной строки (оставил это отключенным изначально)
Я в основном там, по крайней мере, с половиной этого. Если у вас есть некоторые рекомендации о том, как активировать этот фильтр и очистить остальные, я был бы признателенуслышав об этом.
Продолжение:
Я изменил свою функцию следующим образом:
$(function () {
$('.relatedrecipe').click(function () {
var recipe = $(this).data('recipename');
setTimeout(function () {
$("#recipegrid")[0].clearToolbar();
}, 50);
setTimeout(function () {
$('gs_RecipeName').val(recipe);
$("#recipegrid")[0].triggerToolbar();
}, 200);
});
}
и это действительно, как ответил Олег ниже, отфильтровать до данного связанного рецепта,Далее я хотел выбрать его автоматически.Я попытался добавить следующее в мой второй setTimeout
блок выше.
var firstRowID = $('#recipegrid').getDataIds()[0];
$('#recipegrid').setSelection(firstRowId, true);
, как было упомянуто в SO в качестве средства выбора строки, но это не работает.
Решение для автоматического выбора:
Я немного изменил свой код, и это работает:
$(function () {
$('.relatedrecipe').click(function () {
// store off the value of the related recipe I want to switch to
var recipe = $(this).data('recipename');
// clear any filters on the grid
setTimeout(function () {
$("#recipegrid")[0].clearToolbar();
// set the recipe filter to the related recipe name and trigger the filtering
setTimeout(function () {
$('#gs_RecipeName').val(recipe);
$('#recipegrid')[0].triggerToolbar();
// auto-select the first row
setTimeout(function () {
var firstRowID = $('#recipegrid').jqGrid('getDataIds')[0];
$('#recipegrid').setSelection(firstRowId, true);
}, 50);
}, 50);
}, 50);
});
}