我正在构建我的第一个手机间隙应用程序以连接到我已经在rails中构建的API,我有一个用户可以发布内容的部分,但是当用户点击提交时,它会提交表单而没有任何问题并附加帖子很好,但是如果用户导航到应用程序的另一部分,然后回来会有帖子的第二个副本,如果我看我的服务器控制台我可以多次看到它,另一个真奇怪的是如果用户继续在该部分发布,则会在附加帖子的顶部添加一个额外的帖子,依此类推,直到用户同时发布相同的帖子10次。
由于某些原因,似乎它正在多次循环该函数,但我真的不确定为什么,我有预感它与我的
有关jQuery('#new_rave').live('submit', function( event ) {
但我试过的其他方法导致页面无法加载。
的Jquery / JS
<!-- Load Json data and events -->
<script type="text/javascript">
jQuery('#new_rave').live('submit',function( event ) {
$.ajax({
url: 'http://whoops/goodtimes',
type: 'POST',
dataType: 'json',
data: $('#new_rave').serialize(),
success: function( data ) {
for( var id in data ) {
jQuery('#').html(data[id]);
}
}
});
return false;
});
$(document).ready(function() {
$.getJSON('http://whoops/goodtimes', function( goodtimes ) {
$.each(goodtimes, function( goodtime ) {
var output =
"<li><a href="+this.goodtime.id+">" +
"<h3>" + this.goodtime.title + "</h3>" +
"<p>" + this.goodtime.post + "</p>" +
"<p class='ui-li-aside'><strong>" +
this.goodtime.created_at + "</strong></p>" +
"</a></li>";
$('#content ul').append(output).listview('refresh');
});
});
});
</script>
表格
<!-- New item Popup -->
<div data-role="popup" class="ui-content"
data-overlay-theme="a" data-position-to="window" id="add">
<form id="new_rave">
<label for="goodtime_title">Title</label>
<input type="text" name="goodtime[title]" id="goodtime_title">
<label for="goodtime_post">Rave</label>
<div data-role="fieldcontain">
<textarea name="goodtime[post]" id="goodtime_post"></textarea>
</div>
<input type="submit" value="submit">
</form>
</div>
内容div
<div id="content" data-role="content">
<ul data-role="listview" data-theme="d" data-divider-theme="d"></ul>
</div><!-- /content -->
答案 0 :(得分:2)
我真的不知道你的代码现在是什么.. 但是对于ajax calles我主要用值赋值变量.. 像这样
jQuery('#new_rave').click(function( event ) {
var title = $(':input[name="goodtime[title]"]').val() ;
var post = $(':input[name="goodtime[post]"]').val() ;
$.ajax({
url: 'http://whoops/goodtimes',
type: 'POST',
dataType: 'json',
data: {'title' : title , 'post': post},
success: function( data ) {
for( var id in data ) {
jQuery('#').html(data[id]);
}
}
});
return false;
});
只需用按钮元素替换提交输入即可。 这将节省许多不需要的工作,避免很多麻烦
答案 1 :(得分:0)
那是因为你的提交按钮本身发布了表格(默认情况下),显然也是ajax ...
下面是如何禁用提交按钮的默认操作。
jQuery(SUBMIT_BUTTON_ID).bind('click',function( event ) {
event.preventDefault();
$.ajax({
url: 'http://whoops/goodtimes',
type: 'POST',
dataType: 'json',
data: $('#new_rave').serialize(),
success: function( data ) {
for( var id in data ) {
jQuery('#').html(data[id]);
}
}
});
});
答案 2 :(得分:0)
在再次绑定之前先尝试取消绑定事件
$('#new_rave').off().on('submit', function(event) {
//your code goes here
});