Facebox, добавляющий запятые для ввода

Я использую facebox для отображения формы в лайтбоксе, ничто слишком захватывающее (просто несколько datepickers, некоторые текстовые поля и флажок). Однако у меня есть проблемы с обратными передачами, каждый раз, когда я отправляю назад от facebox, он добавляет'', к запуску входа (таким образом, "кролик" становится", кролик") Теперь, я видел, что была та же проблема с modalpopup расширителем от ajaxcontroltoolkit, таким образом, я предполагаю, что это - распространенная проблема.

Кто-либо может или объяснить, почему это происходит, или скажите мне, как зафиксировать его? обеспечить достойный способ зафиксировать это? Я на самом деле сделал это, и это работает очень приятно, но я действительно не хочу отвечать на свой собственный вопрос щедрости, таким образом, кто-то еще дает ему движение!

С наилучшими пожеланиями, Ed

Править

См. присоединенный ответ для правильного решения (я зафиксировал это в конечном счете, но не хотел разрушать вопрос о щедрости, таким образом, оставил ответ до впоследствии).

5
задан Ed James 18 January 2010 в 10:56
поделиться

3 ответа

Почему вы не обрезаете вывод? Просто удалите «,» для каждой строки

2
ответ дан 15 December 2019 в 01:02
поделиться

Я никогда не запрограммировал в 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 для примеров лица, похоже, что он живет внутри собственного

и копирует все, что должно быть показано в этом div. Таким образом, структура образца Page Facebox может выглядеть как:

<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 - это тот, с обновленными значениями, которые нам нужны.

1
ответ дан 15 December 2019 в 01:02
поделиться

Хорошо, вот как я это исправил:

меняя

 функцию 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.

1
ответ дан 15 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

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