防止在QWebView中重新加载表单

Prevent form reload in QWebView

本文关键字:加载 表单 新加载 QWebView      更新时间:2023-09-26

我正在异步提交一个表单。因此,我不希望页面重新加载,因此在处理程序中放置了preventDefault调用,但它仍然在提交时重新加载页面。就我阅读的其他主题而言,这应该足以禁用页面重新加载,但很明显,我遗漏了一些内容。

$( "#loginForm" ).submit( function( event ) {
    try {
        event.preventDefault();
        // Some async handling
    } catch( ex ) {
        alert( ex );
    }
    return false;
} );

有人能指出我方法中的问题吗?整件事都发生在QtWebkit控件内部。

编辑:

现在也尝试过:

$( "#submitButton" ).on( "click", function( event ) {
    try {
        // Some async handling
    } catch( ex ) {
        alert( ex );
    }
    return false;
} );

没有什么不同的结果。

尝试查看loginForm提交事件是否被捕获:

$( "#loginForm" ).submit( function( event ) {
    alert('submit event fired');
});

如果它正在发射,那么试试这个:

$( "#loginForm" ).submit( function( event ) {
    event.preventDefault();
    try {
        //do something in here
        // Some async handling
    } catch( ex ) {
        alert( ex );
    }
    return false;
});

顺便问一下,它是ASP.NET web表单吗?表单ID不同,而不是#loginForm

先做一些处理,然后调用e.preventDefault,而不是像Matthias的代码那样反过来。

另请参阅"return false;"之间的区别和'e.preventDefault()

return false;event.preventDefault();均按预期工作。看看这个Fiddle。您的事件处理程序可能有问题。

$( "#loginForm" ).submit( function( event ) {
    try {
        // Some async handling
    } catch( ex ) {
        alert( ex );
    }
    event.preventDefault();  // or return false;
} );

如果#loginForm引用的是表单本身(而不是提交输入),那么这就是您的问题。将事件指向提交输入本身。如果失败,请将输入submit更改为按钮,这肯定会起作用。

编辑:

将输入提交按钮更改为:

    <button id="submitButton">Submit</button>

这样就没有默认的阻止,因为它不是表单输入提交。此按钮将永远不会重新加载页面。然后您只需要将一个点击事件附加到#submitButton