3

当用户单击表单的提交按钮时,我正在显示密码提示而不是提交表单。我希望在用户单击提示的“确定”按钮时提交表单。我正在使用 jquery impromptu 插件(在版本 3.1 和 4.0.1 中都试过)。我很着急,没有发现我的代码有什么问题,或者我完全错过了一些东西。

这是我的代码 -

试用 1
HTML 部分

<form name="frmAddAdnetworkTemplate" id="frmAddAdnetworkTemplate" action="someAction">
  ...
  ...
  <input id="submit" type="submit" name="submit" value="Submit"  onclick="return promptPassword();" />
</form>

Javascript 部分

function promptPassword()
{
   /*prepared passwordForm = some html; here */
   $.prompt(passwordForm,{ buttons: { Ok:, Cancel: false , submit: }, callback: submitPasswordPrompt, focus: 1});

   return false; //so as to not submit the form
}

function submitPasswordPrompt(value,m,form)
{
    $("form#frmAddAdnetworkTemplate").submit(); //this does not work - no js error as well
}

但是,表单没有提交。

试用 1.1 而不是在提交时调用 submitPasswordPrompt,

function promptPassword()
{
   $.prompt(passwordForm,{ buttons: 
                             { Ok: $("#frmAddAdnetworkTemplate").submit(), //this too does not work
                               Cancel: false }, 
                           focus: 1
                          });

}

试用 1.2

我尝试使用 preventDefault() -

HTML 部分

<input id="submit" type="submit" name="submit" value="Submit" onclick="promptPassword(event);"/>

Javascript 部分

function promptPassword(e)
{
  e.preventDefault();
  $.prompt(passwordForm,{ buttons: { Ok: true, Cancel: false }, submit: submitPasswordPrompt});

  function submitPasswordPromptTest(e, value,m,form)
  {
     if(value)
     {
        $("#frmAddAdnetworkTemplate").submit(); //does not work
     }
  }

试用 2 我还尝试通过与提交按钮上的单击事件绑定来调用文档文档中的 $.prompt .ready -

HTML 部分

<input id="submit" type="submit" name="submit" value="Submit" />

Javascript 部分

$("#submit").click(function(){
   $.prompt(passwordForm,{ buttons: { Ok: $("#frmAddAdnetworkTemplate").submit(), Cancel: false }});
   return false;
});

当我尝试 $("#frmAddAdnetworkTemplate").off('submit').submit(); 时出现此错误 -

e[h] is not a function

在此处输入图像描述

4

3 回答 3

1

在提交时使用您的按钮 ID

对于我的情景

$.prompt(msg, {
    buttons: btns,
    submit: function (v) {
        //this is simple pre submit validation, the submit function
        //return true to proceed to the callback, or false to take 
        //no further action, the prompt will stay open.
    },
    callback: function (e, v, m, f) {
        if (v) {
            $("#MainContent_HiddenFieldIsContinueWithSave").val('1');
            $("#MainContent_buttonSave").submit();
        }
        else { }
    }
});
于 2012-10-16T10:39:07.640 回答
1

将内联 Javascript 与 jQuery 函数和事件混合使用会让人难以理解。

您的“试用 1.2”尝试不起作用,因为其中没有定义“事件”变量,onclick="promptPassword(event);"并且该promptPassword()函数不接受任何参数。因此,您不能使用e.preventDefault()as eis not defined(作为 jQuery 对象)。

但是,使用 jQuery,您可以绑定到表单提交事件以捕获所有类型的提交。即当使用 Enter 键或单击提交按钮时。

$(document).ready(function() {
    $('#myForm').submit(function(event) {
        var password = "password",
            promptText = "Password required",
            isAuthenticated = (password == prompt(promptText));

        if (!isAuthenticated) {
            event.preventDefault();
            //console.log("Invalid password");
        }
    });

});

查看演示

于 2012-03-05T15:20:13.347 回答
1

问题是由 id="submit" 引起的,由于某种原因,这与 HTML 提交混淆了。我之前遇到过这个问题,答案是将id和名称(为了安全起见)更改为其他内容:

<input id="my-form-submit" type="submit" name="my-form-submit" value="Submit" />
于 2012-08-30T23:38:52.547 回答