Jquery datepicker在第一次单击时不弹出,但在第二次单击时弹出

时间:2013-02-14 16:10:54

标签: c# javascript jquery asp.net datepicker

我遇到了jquery datepicker的问题。

我将jquery datepicker附加到javascript函数中动态生成的文本框。

问题是第一次点击时没有弹出日期选择器, 如果我在javascript函数中放置一个断点或警报,那么首次点击时会弹出datepicker。

这是我正在使用的JavaScript函数:

function CalendarPopUpOnClick(TextBoxId, HiddenFieldId) {
    if (TextBoxId != undefined) {
        $('#' + serverIdPrefix + TextBoxId).keypress(function (event) {
            event.preventDefault();
        });
        var dateTimeDueDate = $('#' + serverIdPrefix + HiddenFieldId).val();
        var dateTimeArrDueDate = dateTimeDueDate.split(" ");
        var dateOnlyDueDate = dateTimeArrDueDate[0];
        $('#' + serverIdPrefix + TextBoxId).val(dateOnlyDueDate);

        setTimeSpanBeginInput = function () {
            var dateTime = $('#' + serverIdPrefix + HiddenFieldId).val();
            var dateTimeArr = dateTime.split(" ");
            var dateOnly = dateTimeArr[0];
            $('#' + serverIdPrefix + TextBoxId).val(dateOnly);
        }
        $('#' + serverIdPrefix + TextBoxId).datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function (dateText) {
                $('#' + serverIdPrefix + HiddenFieldId).val(dateText + ' 12:00:00 PM');
            },
            onClose: setTimeSpanBeginInput
        });
    }
}

1 个答案:

答案 0 :(得分:0)

谢谢大家,

对于最新的更新感到抱歉。

我使用以下代码进行此操作。

我正在使用C#和Asp.Net,正如@adeneo指出的那样。

我正在创建两个来自C#代码的动态文本框,并将javascript函数添加到文本框的onclik事件中,如下所示:

 DeliveryDateTextBox.Attributes.Add("onClick", "javascript:CalendarPopUpOnClick('" + DeliveryDateTextBox.ClientID + "','" + Hiddenfield_DeliveryDateTextBox.ClientID + "');");


DueDateTextBox.Attributes.Add("onClick", "javascript:CalendarPopUpOnClick('" + DueDateTextBox.ClientID + "','" + Hiddenfield_DueDateTextBox.ClientID + "');");

并在Javascript文件中添加以下代码:

$(document).ready(function()
{
/* Get id prefixes for checkboxes, checkbox control elements */
var exampleId = $("input[use='proprietary']").attr("id");
var serverIdPrefixEndPos = exampleId.indexOf("exampleID");
serverIdPrefix = exampleId.substring(0,serverIdPrefixEndPos);

/* Datepicker BEGIN */
setTimeSpanBeginInput = function(){
                                var dateTime = $('#'+ serverIdPrefix +'timeSpanFromDeliveryDateHiddenField').val();
                                var dateTimeArr = dateTime.split(" ");
                                var dateOnly = dateTimeArr[0];
                                $('#'+ serverIdPrefix +'timeSpanFromDeliveryDate').val(dateOnly);
                            } //when calendar closed, copy hidden field value to main date field
$('#'+ serverIdPrefix +'timeSpanFromDeliveryDate').datepicker({dateFormat: 'yy-mm-dd', onSelect: function(dateText){ $('#'+ serverIdPrefix +'timeSpanFromDeliveryDateHiddenField').val(dateText + ' 12:00:00 PM'); }, onClose: setTimeSpanBeginInput});

setTimeSpanEndInput = function(){
                                var dateTime = $('#'+ serverIdPrefix +'timeSpanToDateHiddenField').val();
                                var dateTimeArr = dateTime.split(" ");
                                var dateOnly = dateTimeArr[0];
                                $('#'+ serverIdPrefix +'timeSpanToDeliveryDate').val(dateOnly);
                            } //when calendar closed, copy hidden field value to main date field
$('#'+ serverIdPrefix +'timeSpanToDeliveryDate').datepicker({dateFormat: 'yy-mm-dd', onSelect: function(dateText){ $('#'+ serverIdPrefix +'timeSpanToDateHiddenField').val(dateText + ' 12:00:00 PM'); }, onClose: setTimeSpanEndInput});

/* Datepicker END */



});//end document ready 
function CalendarPopUpOnClick(TextBoxId, HiddenFieldId) 
{

    if (TextBoxId) {
        var textBox     = $('#' + serverIdPrefix + TextBoxId),
            hiddenField = $('#' + serverIdPrefix + HiddenFieldId);

        textBox.focus();

         $(":input").bind('paste', function(e) {
        setTimeout(function() {
         var dateval =hiddenField.val();
              if(dateval.indexOf('0001-01-01')==-1)
                textBox.val(  hiddenField.val().split(" ")[0]  );
              else
                textBox.val('');  
        }, 100);
        });            

        textBox.keypress(function(event) {event.preventDefault();});
        hiddenField.keypress(function(event) {event.preventDefault();});
        var dateTime = hiddenField.val();
        var dateTimeArr = dateTime.split(" ");
        var dateOnly = dateTimeArr[0];
        textBox.datepicker({
            dateFormat: 'yy-mm-dd',
            onSelect: function (dateOnly) {
                hiddenField.val(dateOnly + ' 12:00:00 PM');
            },
            onClose: function() {
              var dateval =hiddenField.val();
              if(dateval.indexOf('0001-01-01')==-1)
                textBox.val(  hiddenField.val().split(" ")[0]  );
            }
        });
       textBox.datepicker().datepicker('show');
    }
}