Я не могу выполнить эту функцию jquery должным образом. Когда я нажимаю кнопку "Отправить форму", отображаются только два первых предупреждения, а затем перезагрузка страницы. Поэтому я снова нажимаю кнопку отправки формы с перезагруженной страницей, а затем показывает остальные предупреждения (начиная с третьего), а затем функция работает нормально.
В заключение: мне нужно нажать кнопку "Отправить два раза вместо одного", чтобы выполнить функцию.
Есть идеи? Спасибо.
Код JS:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
alert("enters script");
$(function () {
alert("enters jquery function");
$(".submit").click(function () {
alert("enters click submit function");
var name = $("#name").val();
var date = $("#date").val();
var dataString = 'name=' + name + '&date=' + date;
alert("saved variables");
if (name == '' || date == '') {
alert("enters if");
$('.success').fadeOut(200).hide();
$('.error').fadeOut(200).show();
} else {
alert("enters else");
$.ajax({
type: "POST",
url: "join.php",
data: dataString,
success: function () {
alert("enters success");
$('.success').fadeIn(200).show();
$('.error').fadeOut(200).hide();
refresh();
}
});
}
return false;
});
});
</script>
Код HTML:
<form method="post" name="form">
<ul>
<li>
Name <input id="name" name="name" type="text" />
</li>
<li>
Date <input id="date" name="date" type="date" />
</li>
</ul>
<div >
<input type="submit" value="Submit" class="submit"/>
<span class="error" style="display:none"> Please Enter Valid Data</span>
<span class="success" style="display:none"> Registration Successfully</span>
</div>
</form>
Прежде всего, спасибо всем за вашу помощь.
Наконец, основная проблема исходит из другой части кода. Я использовал pjax (https://github.com/thybag/PJAX-Standalone), чтобы заменить форму другим html-документом (в данном случае page1.html) после выполнения вставки mysql через "join.php". И я не называю функцию jquery должным образом.
Объяснение: Вы начинаете в page1.html, затем нажимаете "Перейти на страницу 2" (это заменит div "content" телом страницы2.html). Затем заполните форму и отправьте ее. Когда вы нажимаете "Отправить", активируется функция jquery (join.php mysql insert внутри) и, наконец, снова заменяется div "content".
Решение (это работает):
page1.html
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript" src="pjax-standalone.js"></script>
<script type="text/javascript">
pjax.connect({
'container': 'content',
'beforeSend': function(){console.log("before send");},
'complete': function(){console.log("done!");
if($("#button_pg_2").length)
{
$( document ).ready(function()
{
$(".submit").click(function()
{
var nombre = $("#name").val();
var fecha = $("#date").val();
var dataString = 'name='+ name + '&date=' + date;
if(name=='' || date=='')
{
$('.success').fadeOut(200).hide();
$('.error').fadeOut(200).show();
}
else
{
$.ajax(
{
type: "POST",
url: "join.php",
data: dataString,
success: function()
{
$('.success').fadeIn(200).show();
$('.error').fadeOut(200).hide();
replace();
}
});
}
return false;
});
});
}
}
});
</script>
<script type="text/javascript">
function replace()
{
pjax.invoke('page1.html', 'content');
}
</script>
</head>
<body>
<div id="header">
This div never changes
</div>
<div id="content">
<a href="page2.html" data-pjax="content">Go To Page 2</a>
</div>
</body>
</html>
page2.html
<html>
<body>
<form method="post" name="form">
<ul>
<li>
Name <input id="name" name="name" type="text" />
</li>
<li>
Date <input id="date" name="date" type="date" />
</li>
</ul>
<div >
<input type="button" id="button_pg_2" value="submit" class="submit"/>
<span class="error" style="display:none"> Please Enter Valid Data</span>
<span class="success" style="display:none"> Registration Successfully</span>
</div>
</form>
</body>
</html>
используйте event.preventdefault, чтобы остановить отправку страницы
Попробуй это:
<script type="text/javascript">
$ (document).ready(function() {
$ (". submit"). click (function() {alert ("entra en la funcion del clic del submit");
var nombre = $("#nombre").val();
var fecha = $("#fecha").val();
var dataString = 'nombre='+ nombre + '&fecha=' + fecha;
alert("variables guardadas");
if(nombre=='' || fecha=='')
{
alert("entra en el if");
$('.success').fadeOut(200).hide();
$('.error').fadeOut(200).show();
}
else
{
alert("entra en el else");
$.ajax({
type: "POST",
url: "join.php",
data: dataString,
success: function()
{
alert("entra en el success");
$('.success').fadeIn(200).show();
$('.error').fadeOut(200).hide();
refresca();
}
});
}
return false;
});
var nombre = $("#nombre").val();
var fecha = $("#fecha").val();
var dataString = 'nombre='+ nombre + '&fecha=' + fecha;
alert("variables guardadas");
if(nombre=='' || fecha=='')
{
alert("entra en el if");
$('.success').fadeOut(200).hide();
$('.error').fadeOut(200).show();
}
else
{
alert("entra en el else");
$.ajax({
type: "POST",
url: "join.php",
data: dataString,
success: function()
{
alert("entra en el success");
$('.success').fadeIn(200).show();
$('.error').fadeOut(200).hide();
refresca();
}
});
}
return false;
});
}); });
Ваша проблема заключается в использовании кнопок submit
, у них есть поведение по умолчанию, отличное от того, что вы добавляете в качестве события к нему.
заменил это:
<input type="submit" value="Submit" class="submit" />
с:
<input type="button" value="Submit" class="submit" />
это вы работаете DEMO
кроме изменения кнопки отправки на обычную кнопку, вы можете исправить свой код, отключив это поведение по умолчанию, добавив onsubmit
в свой узел формы:
<form method="post" name="form" onsubmit="return false;">
<!--your stuff-->
</form>
submit
по умолчанию запрещено, а не button
кнопки. но дело в том, что если вы не запретите отправку, это отправит все содержимое формы на сервер, и ваша страница перезагрузится.