【问题标题】:jquery ui datepicker not working with tabsjquery ui datepicker不使用标签
【发布时间】:2015-06-09 21:25:03
【问题描述】:

当用户在 jquery ui 代码中切换选项卡时,他们可以单击按钮将数据添加到 jqgrid。唯一不工作的是日期选择器;它会启动一次,之后切换到新标签时它不会再次启动。

源文档代码;

<link href="/Includes/Site.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="/Includes/jqgrid/css/jquery-ui.css">
<link rel="stylesheet" type="text/css" href="/Includes/jqgrid/src/css/ui.jqgrid.css">
<script src="/Includes/jqgrid/js/jquery-2.1.4.min.js"></script>
<script src="/Includes/jqgrid/css/jquery-ui-1.11.4.min.js"></script>
<script src="/Includes/jqgrid/js/i18n/grid.locale-en.js"></script>
<script src="/Includes/jqgrid/js/jquery.jqGrid.min.js"></script>
<script src="/Includes/validation/dist/jquery.validate.min.js"></script>
<script src="/Includes/validation/dist/additional-methods.min.js"></script>

$("#tabs").tabs(
{
    //each tab activation
    activate:function(event, ui)
    { loadGrid(); },
    beforeActivate:function(event, ui)
    {
        var curTab = $('#tabs .ui-tabs-active');
        var curTabName = curTab.text();
        var pos = curTabName.search('-');
        var curID = curTabName.slice(0,pos); 

        var passFrmDiv = "div[id^=adddaydata" + curID + "]";

        $(passFrmDiv).html("");
    }
}); 

function loadGrid()
{
    var curTab = $('#tabs .ui-tabs-active');
    var curTabName = curTab.text();
    var pos = curTabName.search('-');
    var newID = curTabName.slice(0,pos); 

    //reset adddaydata
        $("div[id^=adddaydata" + newID + "]").text('');

    //load form
        var getFrmURL = '90daywellform.php?id=' + newID + '&d=' + $.now();
        var passFrmDiv = "div[id=wellform" + newID +"]";

        $.get(getFrmURL, function(data)
        { $(passFrmDiv).html(data); }); 
        //$(passFrmDiv).load('90daywellform.php?id=' + newID + ' #loadform');

    //load grid
        var getGrdURL = '90daygrid.php?id=' + newID + '&d=' + $.now();
        var passGrdDiv = "div[id=jqgrid" + newID +"]";

        $.get(getGrdURL, function(data)
        { $(passGrdDiv).html(data); }); 

        //$(passGrdDiv).load('90daygrid.php?id=' + newID);

};

//date picker function for adding wells info            
$("button[id^=addday]").click(function() 
{
    var curTab = $('#tabs .ui-tabs-active');
    var curTabName = curTab.text();
    var pos = curTabName.search('-');
    var newID = curTabName.slice(0,pos); //id of the current well
    //var dtTag = '#datepicker' + newID;

    $.get('get90maxday.php?id=' + newID,
        function(data) 
        { 
            var passMax = data;
            var getFrmURL = '90dayadddayform.php?id=' + newID + '&maxday=' + passMax + '&d=' + $.now();
            var passFrmDiv = "div[id^=adddaydata" + newID + "]";

            $.get(getFrmURL, function(data)
            { $(passFrmDiv).html(data); }); 

            //$().text(newID + " " + passAPI);
            //$("#gridarea").load('scadagrid.php?api=' + passAPI + '&start=' + passStart + '&end=' + passEnd);
        }
    );
}); 

这是正在加载的动态文档中的代码;

<?php
$id = $_GET['id'];
?>  

<link href="/Includes/Site.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="/Includes/jqgrid/css/jquery-ui.css">
<script src="/Includes/jqgrid/js/jquery-2.1.4.min.js"></script>
<script src="/Includes/jqgrid/css/jquery-ui-1.11.4.min.js"></script>
<script src="/Includes/validation/dist/jquery.validate.min.js"></script>
<script src="/Includes/validation/dist/additional-methods.min.js"></script>

<tr>
    <td><label for="dt<?php echo $id; ?>">Date</label></td>
    <td><input id="dt<?php echo $id; ?>" name="dt<?php echo $id;?>" type="text"></td>
</tr>

var passID = $("input[id^=id]").val();
var dtPkr = "input[id=dt" + passID +"]";

$(dtPkr).datepicker();

非常感谢任何帮助

【问题讨论】:

  • 您的 php 文件底部的 javascript 不在脚本标签内。所有脚本都需要在 &lt;script&gt;&lt;/script&gt;
  • 我的代码中有打开和关闭标签。我没有包括我的所有代码,只是相关部分。我添加了一个“不相关”函数,因为它是从其余发生的选项卡激活序列中调用的。
  • 已编辑添加调用此动态文档的按钮单击的内容。我没有意识到我最初没有它。

标签: php jquery jquery-ui tabs datepicker


【解决方案1】:

如果您将其托管在选项卡中,您将想要利用 activate 事件(在代码中看不到它,但它在问题中?)。请参阅jQuery UI Tabs Widget 文档。

您将要在activateloadGrid() 函数中添加一些东西来初始化日期选择器:

$(".datepicker").datepicker();

当然,您必须让日期选择器属于 datepicker 类才能正常工作。请参阅jQuery UI Datepicker 文档。

【讨论】:

  • 我在“activate:function(event, ui)”标签下有以下内容,下面有更多代码。但是,这不会在激活时加载。单击一个按钮,当单击该按钮时,它会识别当前选项卡并将此内容加载到当前选项卡中。此注释行标识内容在源文档中“从”加载的位置; "//用于添加井信息的日期选择器功能"
  • 让我提供更多背景信息。我正在加载一个表单,并且我正在为每个选项卡加载一个具有完全不同名称的表单,因此不会有任何可能的冲突。输入日期后,它使用日期和另一个传递的参数调用另一个文档,将信息加载到表单的其余部分,并从其他字段中删除只读。然后用户可以查看数据并填充其他几个必填字段。所有这些都在起作用。可以从任何选项卡调用日期选择器,一次(总计),一旦使用,一次,它不会从任何选项卡工作。
  • 更新了我上面的答案。我认为您只是在激活代码中缺少日期选择器初始化。
  • 我是这样根据id初始化的(变量定义见原始代码,dtPkr是变量); $(dtPkr).datepicker();我在输入语句中添加了以下类; class="dt" 。现在我对 datepicker 的初始化是 $('.dt').datepicker();完全相同的问题:((是的,这是服务器/客户端的混合,但它会向客户端输出正确的代码,它将从那里运行)。客户端得到这个; class="dt23" 在 $( 的输入和初始化中'.dt23').datepicker();
  • 好的 - 我对此进行了“重新编写”,并且能够让它与班级一起工作。最初,这是使用用户单击的按钮从第二页中提取日期,包括日期选择器。现在,我将日期放在原始页面上,而不是按钮,并且我为所有日期选择器框使用了一个类(同名);现在他们都开火了。似乎 datepicker 以一个名称触发一次。它进行了改造,但您的建议会导致答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
相关资源
最近更新 更多