Я использую facebox для отображения формы в лайтбоксе, ничто слишком захватывающее (просто несколько datepickers, некоторые текстовые поля и флажок). Однако у меня есть проблемы с обратными передачами, каждый раз, когда я отправляю назад от facebox, он добавляет'', к запуску входа (таким образом, "кролик" становится", кролик") Теперь, я видел, что была та же проблема с modalpopup расширителем от ajaxcontroltoolkit, таким образом, я предполагаю, что это - распространенная проблема.
Кто-либо может или объяснить, почему это происходит, или скажите мне, как зафиксировать его? обеспечить достойный способ зафиксировать это? Я на самом деле сделал это, и это работает очень приятно, но я действительно не хочу отвечать на свой собственный вопрос щедрости, таким образом, кто-то еще дает ему движение!
С наилучшими пожеланиями, Ed
Править
См. присоединенный ответ для правильного решения (я зафиксировал это в конечном счете, но не хотел разрушать вопрос о щедрости, таким образом, оставил ответ до впоследствии).
Почему вы не обрезаете вывод? Просто удалите «,» для каждой строки
Я никогда не запрограммировал в ASP.NET или использовал лицевую коробку на этот вопрос, но вот пара Решения из моих маленьких исследований, которые могут работать.
Существует функция
, функция в источнике личности, где выполняется фактическое клонирование:
reveal: function(data, klass) {
$(document).trigger('beforeReveal.facebox')
if (klass) $('#facebox .content').addClass(klass)
$('#facebox .content').append(data) // <--- This does the cloning
Дополнительная запятая, очевидно, из исходного поля формы, которое было повторено. Вы можете связать функцию Click () к кнопке отправки, которая отправляет форму, и в этой функции удаляйте один из клонов. Поскольку эта функция должна выполняться до обработки данных формы, следует позаботиться о дупликатах.
$("#my-submit-button").click(function() { $('#facebox .content').empty(); }
Если это не работает, то это, безусловно, будет. У Facebox есть куча крючков для запуска вашего кода после различных событий. Один из крючков - peake.Facebox
или Afterreveal.Facebox
. Поскольку клонирование сделано на выявлении, вам придется связывать пользовательскую функцию для запуска на этом событии, и в этой функции измените идентификатор / имена всех элементов. Добавьте случайное слово, как _temp
или что-то для каждого элемента. Не точный код, но я надеюсь, что вы получите идею.
(document).bind('reveal.facebox', function() {
$("#facebox .content > *").each(
// change the id's/name's
);
});
Редактировать :
, глядя на HTML для примеров лица, похоже, что он живет внутри собственного , на основании этой структуры и примера, входное поле с
<html>
..
<form runat="server">
<div id="myForm">
// original form controls go here, probably hidden
<input id="theId" type="text" value="" />
</div>
<div id="facebox">
...
<div class="content">
// the original form is copied inside this space and then displayed
// this is the one the user interacts with and makes changes to
<input id="theId" type="text" value="new value" />
</div>
...
</div>
</form>
..
</html>
id = Tyid
появляется внутри Div # MyForm
и Div # Facebox
. Div # Facebox
- это тот, с обновленными значениями, которые нам нужны.
Хорошо, вот как я это исправил:
меняя
к
функцию fillFaceboxFromHref(href, klass) {
....
если (href.match(/#/)) {
var url = window.location.href.split('#')[0]
var target = href.replace(url, '')
$.facebox.show($(target).clone().show(), klass)
....
}
функция fillFaceboxFromHref(href, klass) {
....
если (href.match(/#/)) {
var url = window.location.href.split('#')[0]
var target = href.replace(url, '')
$.facebox.show($(target).show(), klass)
....
}
остановит клонирование входа и вместо этого использует фактический div.
Затем, это просто случай повторного добавления внутреннего содержимого в #aspnetform (или #body, как оно изначально использовалось [вы должны изменить это, чтобы разрешить asp.net postbacks]) до того, как оно будет очищено в close.facebox binding, подобно этому:
$(документ).bind('close.facebox', функция() {
/// две добавленные строки для добавления содержимого обратно в #aspnetForm, с отображением:none; (т.е. невидимый)
$('#facebox .content').children().css({'display' : 'none'});
$('#aspnetForm').append($('#facebox .content').html());
/// дополнительная строка, чтобы убедиться в отсутствии эффекта мигания при закрытии фейсбокса: содержимое тоже находится там!
$('#facebox .content').children().css({ 'display': 'block' });
....
Теперь в качестве содержимого будет использоваться оригинальный div, что позволяет избежать проблемы с запятыми. Однако, если вы хотите использовать div, который изначально виден на странице, то вам понадобится некоторое дополнительное скручивание в связке close.facebox.