2013-03-07 2 views
6

Предположим, у меня есть поле #date. Сначала я инициализировать его с некоторыми опциями (они не являются важными в данный момент):jQueryUI datepicker widget add 'onClose' функция после инициализации виджета

$('#date').datepicker(options); 

Тогда, если я пытаюсь добавить onClose функцию, я хотел бы сделать:

$('#date').datepicker({onClose: function(dateText, inst){console.log("Hello World");}}); 

Howerver, это переопределение параметры, заданные ранее. Предположим, у меня нет доступа к этим параметрам - датапикер инициализирован, параметры установлены, и теперь мне нужно добавить функцию onClose. Как это сделать? Я пробовал .datepicker('option','onClose',function(){}); без эффекта.

+1

Вы должны инициализировать 'datepicker' на идентификатор только один раз. Если вы делаете несколько раз, последнее будет отменять первые параметры. Это то, что происходит? –

+1

Да. Вот почему мне нужен другой способ добавить функцию onClose. – alekwisnia

ответ

6

Попробуйте как

$('#date').datepicker('option' , 'onClose', function() {}); 
+0

Это то, что я пробовал, он не работает ни один :( – alekwisnia

0

Попробуйте это:

$('#date').datepicker().bind('onClose',function(){ 
    console.log("Hello World"); 
}); 
+1

На самом деле, это самое близкое решение. Я изменил свои параметры, чтобы они запускали события, например: 'onClose: function (dateText, inst) { $ (this) .trigger ("date_closed", [dateText, inst]} ' И тогда я могу использовать этот триггер везде, где хочу: ' $ ('# date'). on ('date_closed', function (dateText, inst) {}); ' Не слишком аккуратный, но отвечает моим потребностям :) – alekwisnia

+0

почему downvote мой ответ !!!!? –

+0

Возможно, он был заблокирован, потому что ['bind' устарел в пользу 'on'] (http: //api.jquery.com/bind/) и потому, что datepicker имеет [метод опций] (http://api.jqueryui.com/datepicker/#method-option), который предназначен для этого прецедента. – ChrisW

5

Попробуйте это:

$('#date').datepicker(); 
... 
$('#date').datepicker("option", { 
    onClose: function(dateText, inst){console.log("Hello World");} 
}); 

Конечно, это будет превалировать предыдущую OnClose функцию вы установили ранее. источник: jQuery forum post

0

Определите свою функцию закрытия как только один из ваших вариантов в инициализации. Это работает для меня.

$('#date').datepicker({ 
    dateFormat: "dd/mm/yy", 
    onClose: function(dateText, inst){console.log("Hello World");} 
}); 
+0

Not во время инициализации: OP хочет сделать это после инициализации (например, usi ng [метод опций] (http://api.jqueryui.com/datepicker/#method-option)). – ChrisW

0

У меня также была проблема с тем, что более старые функции закрытия заменялись. После многого поиска, и я реализовал свою собственную функцию для решения этой проблемы. Ниже приведен фрагмент кода

function addCloseFunctionToDatePicker(id, funHandler) { 
    var $datePicker=$('#' + id); 
    var prevhandler = $datePicker.datepicker('option', 'onClose'); 
    $datePicker.datepicker('option', { 
     onClose: function (dateText, inst) {      
      if (prevhandler) { 
       prevhandler(dateText, inst); 
      } 
      funHandler(dateText, inst);     
     }    
    });  
} 

Calling механизм:

addCloseFunctionToDatePicker('myDatePicker', function(){ alert("I'm next method"); }); 
Смежные вопросы