2012-10-01 52 views
0

我明顯在做一些愚蠢的事情,我不太明白什麼是錯的。每當我點擊「發送」按鈕,點擊事件都無法觸發。點擊事件不會觸發輸入類型=提交

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(); 
}); 

它仍然沒有正確發送請求,並且控制檯沒有記錄錯誤。我嘗試使用submit事件而不是上面代碼中的click事件,但得到了相同的結果。

編輯2 因此,代碼工作在jsFiddle上,但不在我的瀏覽器中。我真的很困惑

編輯3: 也許這與它有關...請注意,頁面初始加載時,提交按鈕不存在。它是在特定的javascript事件觸發時生成的。

+0

檢查您的瀏覽器中的控制檯,它會給你一個線索發生了什麼問題。瞭解如何調試代碼。 – kapa

+0

當您使用單個項目時,將索引器'[0]'添加到您的'$()'調用中。 – Dai

回答

3

您缺少#msg_body$()功能,它應該是像這樣:

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

而且,你不需要包裹ready的功能,你可以直接在腳本中調用它;你也可以直接設置你的CreateNewMessage功能的處理器,就像這樣:

$(document).ready(CreateNewMessage); 
+0

不完全。 '價值'仍然會導致錯誤。 – ahren

+0

你得到的錯誤信息是什麼? – Dai

+0

我不是OP。它應該是'.val()'或'$(「#msg_body」)[0] .value' – ahren

0

你錯過了之前(「#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(); 
    }); 
})(); 
0

試試這個:

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(); 
    }); 
}); 
1

價值與jQuery是.VAL()。另外,爲什麼不聽提交事件?如果您不希望帖子經過,只需將其返回false即可。

+0

我需要在提交帖子前編輯請求頭以包含CSRD標記。我的理解是,我只能通過AJAX請求來做到這一點。 – Nick

+0

然後從提交函數中觸發Ajax請求。只要您的提交函數返回false,瀏覽器將不會嘗試發佈表單。 –

+0

讓我問一個愚蠢的問題。我很新的JavaScript ...是提交函數附加到onclick屬性的函數? – Nick

相關問題