绑定功能以提交事件

时间:2011-07-04 10:59:04

标签: jquery forms submit

我试图将一个简单的函数绑定到一个提交事件,即:

  1. 检索所有输入字段的值
  2. 设置表单
  3. 的action属性
  4. 提交表格
  5. this answer的启发 - 我想出了以下代码:

    $(document).ready(function() {
        $('#fbook').bind('submit', function(event) {
            event.preventDefault();
            var baseURL = $(this).children('#base').val();
            var hotelID = $(this).children('#destination').val();
            var dateIn = $(this).children('#show-date-in').val();
            var location = baseURL + "&hotelID=" + hotelID + "&dateIn=" + dateIn;
            $(this).attr('action', location);
            $(this).submit();
        });
    });
    

    这是jsFiddle与HTML和JS:http://jsfiddle.net/mattvic/2wRHc/47/

    不幸的是它不起作用,我只是看不到我错在哪里。我希望有人能发现错误。

    非常感谢!

3 个答案:

答案 0 :(得分:4)

您的代码将进入无限循环,因为$(this).submit()调用绑定到表单元素的提交处理程序,这会触发调用$(this).submit()的处理程序,该处理程序调用绑定到表单元素的提交处理程序等等。

如果您使用表单自己的submit方法,则可以避免递归:

this.submit();

答案 1 :(得分:1)

由于表单包含submit类型的按钮,因此您的$(this).submit()无法正常工作。相反,请尝试以下方法 -

$(document).ready(function() {

    $('#booking-button').click(function(event)
    {
        event.preventDefault();
        var baseURL = $("#fbook").children('#base').val();
        var hotelID = $("#fbook").children('#destination').val();
        var dateIn = $('#show-date-in').val();
        var location = baseURL + "&hotelID=" + hotelID + "&dateIn=" + dateIn;
        $("#fbook").attr('action', location);
        $("#fbook").submit();
    });
});

jsfiddle示例。

答案 2 :(得分:0)

将您的jQuery更改为:

$(document).ready(function() {
    $('#fbook').submit(function(event) {
        var baseURL = $('#base', this).val();
        var hotelID = $('#destination', this).val();
        var dateIn = $('#show-date-in', this).val();
        var location = baseURL + "&hotelID=" + hotelID + "&dateIn=" + dateIn;
        $(this).attr('action', location);

    });
});