Выбор даты jQuery не сохраняется после AJAX - PullRequest
4 голосов
/ 10 мая 2010

Итак, я использую средство выбора даты jQuery, и оно работает хорошо. Я использую AJAX, чтобы пойти и получить некоторый контент, очевидно, когда этот новый контент применяется, привязка теряется, я узнал об этой прошлой неделе и обнаружил о методе .live().

Но как мне применить это к моему сборщику дат? Потому что это не событие, поэтому .live() не сможет помочь ... верно?

Это код, который я использую для привязки выбора даты к моему вводу:

$(".datefield").datepicker({showAnim:'fadeIn',dateFormat:'dd/mm/yy',changeMonth:true,changeYear:true});

Я не хочу вызывать этот метод каждый раз, когда запускается мой AJAX, так как я хочу сделать его как можно более универсальным.

Приветствия: -)

EDIT

Как и запрашивал @nick, ниже моя функция-обертка получила метод ajax():

var ajax_count = 0;
function getElementContents(options) {
    if(options.type===null) {
         options.type="GET";
    }

    if(options.data===null) {
        options.data={};
    }

    if(options.url===null) {
        options.url='/';
    }

    if(options.cache===null) {
        options.cace=false;
    }

    if(options.highlight===null || options.highlight===true) {
        options.highlight=true;
    } else {
        options.highlight=false;
    }

    $.ajax({
        type: options.type,
        url: options.url,
        data: options.data,
        beforeSend: function() {
            /* if this is the first ajax call, block the screen */
            if(++ajax_count==1) {
                $.blockUI({message:'Loading data, please wait'});
            } 
        },
        success: function(responseText) {
            /* we want to perform different methods of assignment depending on the element type */

            if($(options.target).is("input")) {
                $(options.target).val(responseText);
            } else {
                $(options.target).html(responseText);
            }
            /* fire change, fire highlight effect... only id highlight==true */
            if(options.highlight===true) {
                $(options.target).trigger("change").effect("highlight",{},2000);
            }
        },
        complete: function () {
            /* if all ajax requests have completed, unblock screen */
            if(--ajax_count===0) {
                $.unblockUI();
            }
        },
        cache: options.cache,
        dataType: "html"
    });
}

Как насчет этого решения, у меня есть rules.js, который включает все мои начальные привязки с элементами, если я должен был поместить их в функцию, а затем вызвать эту функцию при обратном вызове успеха метода ajax, таким образом я не будет повторять код ...

Хммм, подумайте пожалуйста: D

Ответы [ 3 ]

8 голосов
/ 10 мая 2010

Вы можете сделать это так:

function createPickers(context) {
  $(".datefield", context || document).datepicker({
    showAnim:'fadeIn',
    dateFormat:'dd/mm/yy',
    changeMonth:true,
    changeYear:true
  });
}

Для запуска на document.ready, если у вас уже есть функция document.ready, вы можете вызвать:

createPickers();

Или вы можете запустить его в его собственной document.ready ручке , например:

$(createPickers);

В вашем success обратном вызове вы называете это так:

createPickers(responseText);

Для этого нужно только выбрать .datefield в предоставленном контексте (внутренне это использует .find()), поэтому document.ready вы выбираете все соответствующие элементы создайте средства выбора даты, но в своем запросе ajax вы выбираете только совпадающие элементы, которые только что поступили в ответе, и нигде не создаете дублирующие средства выбора даты.

0 голосов
/ 10 мая 2010
Выбор даты

- это функция щелчка на вводе текста. так что вы можете легко пойти:

$('#datepicker').live('click', function(){$(this).datepicker($.datepicker.regional['en']);})
0 голосов
/ 10 мая 2010

Первый порт захода - прочитать этот вопрос, если вы еще этого не сделали: jQuery live () не работает с датчиком даты jQuery UI

"У меня есть привязка к входам лайтбокса при первом появлении лайтбокса, но он не работаетпотом. "

" Когда лайтбокс закрывается, я повторно добавляю его контент на страницу (чтобы не потерять div контента), и это, кажется, убиваетвызов live (). "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...