单击“输入类型上未触发的事件=提交”



我显然在做一些愚蠢的事情,我不太明白出了什么问题。 每当我单击"发送"按钮时,单击事件都会失败。

function CreateNewMessage()
{
    var receiver = $("#receiver").value;
    var msg_body = ("#msg_body").value;
    $("#submit").click(function(event) {
        alert("it works!");
        $.post("new/", {"receiver" : receiver, "msg_body" : msg_body});
    });
}
(function() {
    $(document).ready(function() {
        CreateNewMessage();
    });
})();

和 HTML 按钮

<input id="submit" value="Send" type="submit">

谁能发现我的错误?

编辑:

因此,在考虑了每个人的建议后,这是我的代码现在的样子。

function CreateNewMessage()
{
    $("#submit").click(function(event) {
        var receiver = $("#receiver").val();
        var msg_body = $("#msg_body").val();
        alert("it works!");
        $.post("message/new/", {"receiver" : receiver, "msg_body" : msg_body});
    });
}
$(document).ready(function() {
    CreateNewMessage();
});

它仍然没有正确发送请求,并且控制台没有记录错误。 我尝试使用提交事件而不是上面代码中的单击事件,但得到了相同的结果。

编辑 2所以代码在 jsFiddle 上工作,但不能在我的浏览器中工作。 我真的很困惑

编辑3:也许这与它有关...请注意,最初加载页面时,提交按钮不存在。它是在特定 JavaScript 事件触发时生成的。

你缺少#msg_body$()函数,它应该是这样的:

var receiver = $("#receiver")[0].value;
var msg_body = $("#msg_body")[0].value;

此外,你不需要将ready包装在函数中,你可以直接在脚本中调用它;你也可以直接将 CreateNewMessage 函数设置为处理程序,如下所示:

$(document).ready( CreateNewMessage );

jQuery 的值是 .val()。另外,为什么不听提交事件?如果您不希望帖子通过,只需使其返回 false。

你错过了之前的 $("#msg_body"),所以你的脚本会在那里崩溃。

function CreateNewMessage()
{
    var receiver = $("#receiver").value;
    var msg_body = $("#msg_body").value;
    $("#submit").click(function(event) {
        alert("it works!");
        $.post("new/", {"receiver" : receiver, "msg_body" : msg_body});
    });
}
(function() {
    $(document).ready(function() {
        CreateNewMessage();
    });
})();
<</div> div class="one_answers">

试试这个:

function CreateNewMessage()
{
    var receiver = $("#receiver").value;
    var msg_body = $("#msg_body").value;
    alert("it works!");
    $.post("new/", {"receiver" : receiver, "msg_body" : msg_body});
}
$(function(){
  $("#submit").click(function() {
    CreateNewMessage();
  });
});

最新更新