让我们从一支笔开始:https://codepen.io/Muzical84/pen/EbPXBP
function validateInput(input, event) {
'use strict';
if (input == null || input !== "") {
$.ajax({
method: 'POST',
cache: false,
url: '/api/getAll'
})
.done(function(data, textStatus, jqXHR) {
if (data !== null && $.isArray(data) && data.indexOf(input.toUpperCase()) === -1) { //The AJAX return is valid but the symbol does not exist.
//debugger;
$('#jsErrors').html('<p>The given symbol does not exist.</p>');
$('#jsErrors').addClass('alert');
$('#jsErrors').addClass('alert-danger');
$('#jsErrors').removeClass('hidden');
$('#jsErrors').removeClass('invisible');
$('#jsErrors').show();
} else {
debugger;
editWatchList(input.toUpperCase(), 'watch'); //Pass it along (function omitted from pen)
}
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.error(errorThrown); //I am aware that this is less than ideal. In the "real world", I would ask my supervisor how to handle this instance.
})
.always(function(a, textStatus, c) {
debugger;
event.preventDefault();
});
} else {
alert('Please enter a symbol before submitting.');
}
}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.3.4/vue.min.js"></script>
<!-- This is actually a partial, Laravel Blade, specifically. -->
<div id="jsErrors" class="hidden invisible" role="alert"></div>
<form id="add-symbol-form" class="form-inline" accept-charset=utf-8 autocomplete="off">
<!-- Laravel CSRF field -->
<div class="container">
<input type="text" class="form-control" name="symbol" id="symbol" placeholder="Enter a symbol..." required>
<button type="submit" class="btn btn-dark" onClick="validateInput($('#symbol').val());">Add Symbol</button>
</div>
</form>
<script>
//Enter will have the same effect as clicking the button
$(document).ready(function() {
$(document).keypress(function(e) {
if ($('#symbol').val() !== '' && e.which == 13) { //Only submit if the user hit enter AND there is something in the input box to validate.
validateInput($('#symbol').val());
e.preventDefault();
}
});
});
</script>
这是一个基本的股票追踪器,用拉拉维尔写的。HTML是一个更宽的页面中的刀片部分,当用户想要“观察”一个新的股票符号时,这个片段就会触发。AJAX调用我的Laravel,在邮递员中工作得很好,huzzah!
但是,如果用户输入一个不在数据库中的符号(我没有决定这个限制,所以请不要评论它=-\ ),我想提醒用户,因此在表单上出现了最初为空的和隐藏的<div>。
如果我使用调试器;语句来执行我的代码,该框显示,所有这些都运行得完美无缺,但是当函数结束时,<div>就完全消失了。
为什么?(这与我注意到的地址栏添加查询的地方有关吗?我希望地址栏上写着无论如何都是project.dev。)
PS:不管它有什么价值,我确实可以通过Laravel向我提供Vue;我目前没有使用它,但是如果它有帮助的话,它实际上是零努力地包含它。我只知道杰克-所有关于Vue的事。
发布于 2017-11-02 21:32:16
问题评论摘要..。
似乎您正在处理表单中提交按钮的单击事件。这将导致表单提交并可能重新加载页面,而不考虑执行ajax逻辑。
为了防止出现这种情况,您很可能希望将submit按钮更改为常规按钮,以便在单击表单时不提交表单;或者将事件传递到onclick处理程序,并在ajax逻辑之外调用event.preventDefault(),这样表单就不会提交。
https://stackoverflow.com/questions/47084489
复制相似问题