我正在为附近的活动创建一个Web应用程序,其中一个重要功能是创建事件的选项。截至目前,我有一个包含表格的模态。我在提交表单的输入并将其添加到数据库时遇到了麻烦,使用了javascript和python flask web应用程序。
这是我的HTML:
<!-- Modal -->
<div id="eventInput" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Create an Event</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"></h4>
</div>
<form>
<div class="modal-body">
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="title" placeholder="Event Name" type="text"/>
</div>
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="description" placeholder="Description" type="text"/>
</div>
<div class="form-group">
Start date and time:
<input autocomplete="off" autofocus class="form-control" name="start" placeholder="Start date and time" type="datetime-local"/>
</div>
<div class="form-group">
End date and time:
<input autocomplete="off" autofocus class="form-control" name="end" placeholder="End date and time" type="datetime-local"/>
</div>
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="place" placeholder="Location Name" type="text"/>
</div>
Please use <a href="https://www.google.com/maps">Google Maps</a> to determine the accurate latitude and longitude of your event location
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="lat" placeholder="Location Latitude" type="number"/>
</div>
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="long" placeholder="Location Longitude" type="text"/>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Create Event</button>
</div>
</form>
</div>
</div>
</div>
使用Javascript:
$(function() {
$('submit').click(function() {
var event = {
'title': document.getElementById('title').value,
'description': document.getElementById('description').value,
'start': document.getElementById('start').value,
'end': document.getElementById('end').value,
'place': document.getElementById('place').value
};
$.ajax({
url: '/createEvent',
data: $('form').serialize(),
type: 'POST',
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
});
});
和python:
# Add Event to database
@app.route('/createEvent', methods=['POST'])
def createvent() :
title = request.form['title'];
description = request.form['description'];
place = request.form['place'];
start = request.form['start'];
end = request.form['end'];
db.execute("INSERT INTO events (user_id, title, description, place, start, end) VALUES (:user, :title, :description, :place, :start, :end)",
user=session["user_id"], title=title, description=description, place=place, start=start, end=end)
return render_template("list.html")
答案 0 :(得分:0)
您需要向表单添加ID,并删除onsubmit事件并仅在jquery中使用它。 所有表单元素都没有id属性添加如下:
html:
<div id="eventInput" class="modal fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Create an Event</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title"></h4>
</div>
<form id="target" action="/destination">
<div class="modal-body">
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="title" id= "title" placeholder="Event Name" type="text"/>
</div>
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="description" id ="description" placeholder="Description" type="text"/>
</div>
<div class="form-group">
Start date and time:
<input autocomplete="off" autofocus class="form-control" name="start" id="start" placeholder="Start date and time" type="datetime-local"/>
</div>
<div class="form-group">
End date and time:
<input autocomplete="off" autofocus class="form-control" name="end" id ="end" placeholder="End date and time" type="datetime-local"/>
</div>
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="place" id ="place" placeholder="Location Name" type="text"/>
</div>
Please use <a href="https://www.google.com/maps">Google Maps</a> to determine the accurate latitude and longitude of your event location
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="lat" id="lat" placeholder="Location Latitude" type="number"/>
</div>
<div class="form-group">
<input autocomplete="off" autofocus class="form-control" name="long" id="long" placeholder="Location Longitude" type="text"/>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Create Event</button>
</div>
</form>
</div>
和你的javascript一样:
$( "#target" ).submit(function( event ) {
event.preventDefault();
var new_event = {
'title': document.getElementById('title').value,
'description': document.getElementById('description').value,
'start': document.getElementById('start').value,
'end': document.getElementById('end').value,
'place': document.getElementById('place').value
};
console.log(new_event);
$.ajax({
url: '/createEvent',
data: $('form').serialize(),
type: 'POST',
success: function(response) {
console.log(response);
},
error: function(error) {
console.log(error);
}
});
});