【问题标题】:Multiple Jquery Datepickers & Forms Submitted Via Ajax通过 Ajax 提交的多个 Jquery 日期选择器和表单
【发布时间】:2012-06-25 20:09:15
【问题描述】:

有人可以帮我为以下流程创建函数吗?我想在一个页面上有很多日期选择器,每个都有不同的形式。然后onChange,提交正确的表单。我目前正在一遍又一遍地重复代码以使这种行为起作用。 这是该页面的所有代码。

<html>
<head>
<link rel='stylesheet' type='text/css' media='all' href='style.css' />
<link rel='stylesheet' type='text/css' media='all' href='jqueryui.css' />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>

<script type="text/javascript">
$(document).ready(function () {
    var $datepickers = $(".datepick");
    var $setallow = $(".showdate");
    var $removeallow = $(".hidedate");

    $removeallow.click(function() {
    var $remove = $(this).closest("form");
    $remove.children(".datepick").hide("normal");
        var formData = $remove.serialize();
        submitForm(formData);       
    });
    $setallow.click(function() {
    var $allow = $(this).closest("form");
    $allow.children(".datepick").show("normal");
        var formData = $allow.serialize();
        submitForm(formData);       
    });

    $datepickers.datepicker({ dateFormat: 'yy-mm-dd' });
    $datepickers.change(function() {
        var $form = $(this).closest("form");
        var formData = $form.serialize();
        alert($form.serialize());
    submitForm(formData);       
    });
});
</script>
</head>
<body>
<div>

<h1 align="center">Testing Datepicker</h1>
<div class="entry">
<table id="striping" cellspacing="0" cellpadding="2" width="100%"><tr class="textbold">
<td class="Label" nowrap="nowrap" width="500">
Title Name
</td>
<td class="Label" align="center" nowrap="nowrap" width="70">
Show</td>
<td class="Label" align="center" nowrap="nowrap" width="100">
Don't Show
</td>
<td class="Label" align="left" nowrap="nowrap" width="100">
Date (Year-Month-Day)
</td></tr>


<tr id="highlight">
<td nowrap="nowrap" height="33">Title 19</td>

<form id="form19">
<input name="id" type="hidden" value="19" />
<td align="center" nowrap="nowrap">
<input name="allow" class="showdate" type="radio" value="yes" id="show19" />
</td>
<td align="center" nowrap="nowrap">
<input name="allow" class="hidedate" type="radio" value="no" id="hide19" checked="checked" />
</td>
<td align="center" nowrap="nowrap">
<table width="100%">
<tr><td>
<input name="allowdate" class="datepick" id="datepicker19" type="text" size="12" maxlength="10" value="2012-06-25">
</td>
<td width="121"><div id="feedback"></div></td></tr>
</table>
</td>
<input type="hidden" name="token" value="69601e04ff3580695fa4aa1dc91d35b6" />
</form>

</tr>

<tr id="highlight">
<td nowrap="nowrap" height="33">Title 2</td>

<form id="form2">
<input name="id" type="hidden" value="2" />
<td align="center" nowrap="nowrap">
<input name="allow" class="showdate" type="radio" value="yes" id="show2" />
</td>
<td align="center" nowrap="nowrap">
<input name="allow" class="hidedate" type="radio" value="no" id="hide2" checked="checked" />
</td>
<td align="center" nowrap="nowrap">
<table width="100%">
<tr><td>
<input name="allowdate" class="datepick" id="datepicker2" type="text" size="12" maxlength="10" value="2012-06-25">
</td>
<td width="121"><div id="feedback"></div></td></tr>
</table>
</td>
<input type="hidden" name="token" value="69601e04ff3580695fa4aa1dc91d35b6" />
</form>

</tr>


</table>
</div>

<script>
    function submitForm(formData) {
        $.ajax({
            type: "POST",
            url: "update.php",
            data: formData,
            dataType: "json",
            cache: false,
            timeout: 8000,
            success: function(data) {
                    $("#feedback").html('<img src="icon_updated.png" border="0" />').fadeIn("fast");
                    setTimeout("$('#feedback').fadeOut('slow')", 1000);         
                },
            error: function(data) {
                    $("#feedback").html('<img src="icon_not_updated.png" border="0" />').fadeIn("fast");
                    setTimeout("$('#feedback').fadeOut('slow')", 1000);
                }
        });
    };
</script>

</body>
</html>

我还尝试使用单选按钮来切换显示和不显示日期选择器元素,但没有成功。每页也有超过 2 个日期选择器。我想要一个datepicker 和一个ajax function。我试过上面的链接没有运气。感谢您的帮助。

【问题讨论】:

  • 我将 submitForm 函数移到 doc ready 函数之外,并删除了 doc 周围的“”。不用找了。我在页面上还有其他几个 javascipts,但我将它们全部删除了,但问题仍然存在。
  • 除了您所展示的内容之外,您还必须有其他东西导致了冲突?看看这个jsfiddle
  • 您是否在调试器(例如 firebug for firefox)中收到任何 javascript 错误?
  • 谢谢,当我完全尝试您的代码时,我得到了它的工作。我将尝试从那里构建并一次一步单独重新应用我的格式。

标签: jquery ajax forms datepicker


【解决方案1】:

这些方面的东西应该适合你:

$(function() {
    //var $datepickers = $("#datepicker1, #datepicker2, #datepicker3");
    var $datepickers = $(".datepick");

    $datepickers.datepicker({ dateFormat: 'yy-mm-dd' });
    $datepickers.change(function() {
        var $form = $(this).closest('form');
        var formData = $form.serialize();

        submitForm(formData);       
    });
});

Live DEMO

为了简化设置为 $datepicker 的选择器,您可以向文本框添加一个 datepicker 类。

【讨论】:

  • 由于某种原因,我无法将任何数据发布到 update.php。我做了一个简单的 'isset($_POST["setdate"])' 并返回错误 false 并且它不起作用。我把 return 放在 isset 之前,return 有效。我哪里错了?谢谢
  • 当我输入 'alert($form.serialize());'在 ajax 之前,它没有给我任何查询字符串。
  • 您是否完全复制了我的代码?此外,如果您提醒表单本身,我认为它正在获得预期的结果?
  • 我确实复制了你的代码。当我使用 'alert($("#form1").serialize());' 提醒表单本身时,我确实得到了预期的结果。感谢您的帮助
  • 对不起,我应该更具体一些,当您提醒 $form.html() 时,您得到了预期的结果吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多