4

我正在使用 jQuery 表单插件来绑定同一页面上两个表单的提交事件,以便将它们提交到单独的 PHP 脚本,这些脚本将标记返回到页面上的单独 div。

一种形式刷新下一种形式。我使用“实时”,因此每个表单在刷新时都会重新绑定其事件:

$(document).ready(function() {
    /* Form 1 */
    $('#frmSearch').live('submit', function() {
        $(this).ajaxSubmit({
            target: '#divResults',
            url:    'search_div.php'
        });
        return false;
    });
    /* Form 2 */
    $('#frmResults').live('submit', function() {
        $(this).ajaxSubmit({
            target: '#divLookup',
            url:    'lookup_div.php',
        });
        return false;
    });
});

到现在为止还挺好。每个表单都可以使用 ajax 一次又一次地提交,并且所有绑定从一次提交到下一次都存在。

当我尝试绑定第三个表单并在第二个表单的“成功”选项中触发其提交事件时,就会出现问题:

/* Form 2 */
$('#frmResults').live('submit', function() {
    $(this).ajaxSubmit({
        target: '#divLookup',
        url:    'lookup_div.php',
        success: function(responseText){
            $('#frmLookup').submit();
        }
    });
    return false;
});
/* Form 3 */
$('#frmLookup').live('submit', function() {
    $(this).ajaxSubmit({
        target: '#divMappings',
        url:    'mapped_items_div.php',
    });
    return false;
});

当我这样做时,ajaxSubmit 成功执行,但随后表单的默认提交也被执行,导致页面重新加载。请注意,我确实包含了“return false”;禁止表单的默认提交,但由于某种原因它仍然提交。

我发现,如果我在 Form 2 的成功函数中使用与 Form 3 的“live”相同的选项“绑定”Form 3 的“提交”事件,则不会执行表单的默认提交。不过,这是多余的,如果可以的话,我想避免这样做。

如何抑制 Form 3 的默认提交行为?

4

3 回答 3

3

不确定它是否与您的问题有关,但live()不支持 " submit" 事件

目前不支持:blur, focus, mouseenter, mouseleave, change, submit

于 2009-03-22T01:01:22.043 回答
0

我知道它应该是一样的,但由于这似乎是一个非常奇怪的行为,我会尝试替换

$('#frmLookup').submit();

为了

$('#frmLookup').trigger('submit');

看看这是否改变了什么?

于 2009-03-22T00:47:50.330 回答
0

谢谢,新月新鲜,让我走上正轨。对于我的解决方案,我修改了脚本以仅打印嵌套在表单中的元素,而不是表单本身及其内容。然后我将每个表单的“目标”更改为下一个表单,而不是包含下一个表单的 div。这消除了为每个表单重新绑定提交事件的需要,因为前一个表单的 ajax 函数只是替换其内部元素,而不是完全“刷新”它。

我还决定取消表单插件并简单地使用“.serialize()”和“.ajax”是合适的,如 Paolo Bergantino所示

我的最终产品看起来像这样:

/* Form 1 */
$('#frmSearch').bind('submit', function() {
    var formdata = $(this).serialize();
    $.ajax({
        url:    'result_form.php',
        data:   formdata,
        success: function(responseText){
            $('#frmResults').html(responseText);
        }
    });
    return false;
});

/* Form 2 */
$('#frmResults').bind('submit', function() {
    var formdata = $(this).serialize();
    $.ajax({
        url:    'lookup_div.php',
        data:   formdata,
        success: function(responseText){
            $('#frmLookup').html(responseText);
            $('#frmLookup').trigger('submit');
        }
    });
    return false;
});

/* Form 3 */
$('#frmLookup').bind('submit', function() {
    var formdata = $(this).serialize();
    $.ajax({
        url:    'mapped_items_div.php',
        data:   formdata,
        success: function(responseText){
            $('#divMappings').html(responseText);
        }
    });
    return false;
});
于 2009-03-24T06:38:16.587 回答