#javascript #jquery #dom
#javascript #jquery #dom
Вопрос:
У меня есть всплывающее окно входа в систему, которое будет появляться на каждой странице моего сайта. Что я хочу сделать, так это после того, как пользователь нажмет кнопку отправить, чтобы иметь один JS-файл, в котором находится код jQuery для обработки этого запроса, и выполняет вызов AJAX для проверки параметров в БД.
Я могу заставить всплывающее окно всплывать. И форма загружается. Я думаю, что мой код jQuery будет находиться в отдельном импортированном файле и выглядеть так:
<script type="text/javascript" >
$(function()
{
$("input[type=submit]").click(function()
{
var some_params= $("#param").val();
var dataString = 'Some url to send to ajax';
if( params validated ok )
{
$('.success').fadeOut(200).hide();
$('.error').fadeOut(200).show();
}
else
{
$.ajax({
type: "POST",
url: "/problems/add_problem.php",
dataType: "json",
data: dataString,
success: function(json)
{
$('.success').fadeIn(200).show();
$('.error').fadeOut(200).hide();
}
});
}
return false;
});
});
</script>
Итак, мой вопрос в том, как мне заставить это вызываться только при отправке правильной формы? Форма будет иметь некоторый id=»some_name», но я не совсем понимаю, как заставить этот код jQuery выполняться только при вызове этого элемента формы.
И вот форма, которую я вызываю для отображения во всплывающем окне:
<?php
echo '<div id="login_div">
<form id="login_form" method="post" action="">
<p>
<label for="name"><span>Your Email:</span></label> <input type="text" name="email" />
</p>
<p>
<label for="name"><span>Your Password:</span></label> <input type="password" name="user_pass">
</p>
<p>
<input type="submit" value="Log In" />
</p>
</form>
</div>
<p>
<a href="http://www.problemio.com/auth/create_profile.php">Create Account</a> | <a href="http://www.problemio.com/auth/forgot_password.php">Reset Pass</a>
</p>
';
?>
и вот problemio.js содержимое с помощью jQuery для обработки отправки формы входа в систему:
// javascript library
// login_form
$(function()
{
$("#login_form input[type=submit]").click(function()
{
console.log("test");
alert("1");
// var name = $("#problem_name").val();
// var problem_blurb = $("#problem_blurb").val();
// var dataString = 'problem_name=' name 'amp;problem_blurb=' problem_blurb;
// if(name=='' || problem_blurb == '')
// {
// $('.success').fadeOut(200).hide();
// $('.error').fadeOut(200).show();
/// }
// else
// {
// $.ajax({
// type: "POST",
// url: "/problems/add_problem.php",
// dataType: "json",
// data: dataString,
// success: function(json)
// {
// $('.success').fadeIn(200).show();
// $('.error').fadeOut(200).hide();
//
/// // Here can update the right side of the screen with the newly entered information
// //alert (json);
//
// new_string = "<h2>Most Recently Added Problems</h2>";
// Have to figure out how to make this work with the DOM.
// }
// });
// }
return false;
});
});
Комментарии:
1. Так что, на самом деле, вы просто не хотите, чтобы скрипт был «доступен» / загружен до тех пор, пока не будет отправлена действительная форма? Я бы не стал беспокоиться. Он достаточно мал, чтобы быть включенным в ваше приложение, не будучи неудобным. Тем не менее, я БЫ превратил его в функцию, которая вызывается условно, вместо того, чтобы просто слепо привязывать щелчок ко всем входным данным отправки.
Ответ №1:
Две вещи. Во-первых, когда вы поместите приведенный выше код в отдельный файл JavaScript, будьте уверены, чтобы удалить <script ..=»»> and </script> HTML tags.
Затем измените следующую строку:
$("input[type=submit]").click(function()
Вместо этого сказать:
$("#loginform input[type=submit]").click(function()
А затем установите id=»loginform» в вашем теге <form> .
Комментарии:
1. Я только что это сделал, и у меня возникла одна проблема. После отправки формы запускается неправильный код jQuery. Это здесь: problemio.com после нажатия «upvote» — знаете ли вы, почему может сработать неправильный запрос отправки jQuery?
2. Применяется неправильный код, потому что ко всем входным данным [type=submit] прикреплен другой блок кода, которого нет в problemio.js досье. Вверху есть такой код: var name = $(«#problem_name»).val(); Обязательно найдите этот блок кода, а затем измените $(‘input[type=submit]’) на $(‘#somethingelse input[type=submit]’) как мы сделали с формой входа.
3. Спасибо, просто привыкаю к этому 🙂
4. ваше предложение сработало, чтобы не вызывать эту другую форму. Но я все еще не могу вызвать правильную форму. Я поместил туда несколько операторов протоколирования, но до них так и не дошло: (Есть идеи, что еще не так с моим сайтом 🙂
5. Всплывающее окно формы входа скрыто с помощью #mypopup {display:none} . Я не вижу, где вы показываете форму входа. Другими словами, я не могу понять, как протестировать код на вашем сайте 🙂 🙂
Ответ №2:
Вы можете использовать .submit(), чтобы прикрепить обработчик к событию отправки формы. Сначала вам нужно выбрать свою форму с помощью идентификатора:
$("#some_form_id").submit(function() {
// the code you have in the click event above goes here.
});
Комментарии:
1. спасибо — это вошло бы в мой код jQuery вместо какого-либо другого кода? Где бы я это разместил?
2. Замените текущую строку
$("input[type=submit]").click(function() {
на первую строку моего примера кода. Это должно быть все, что необходимо.
Ответ №3:
Вы можете указать форму, которую хотите запустить jquery. http://api.jquery.com/submit /
Ответ №4:
Если вы не уверены, просто щелкните правой кнопкой мыши на этой веб-странице и прочитайте ее html-код.
<script type="text/javascript" src="some.js"></script>
Кроме того, привязка функции к form.submit намного лучше, чем к кнопке отправки.
$('formid').submit(function(){blablabla;return false;})
Ответ №5:
Если вы хотите обрабатывать событие щелчка для каждой отправки на странице без использования идентификаторов, вы всегда можете использовать this
ключевое слово в событии щелчка, чтобы найти отправителя, а затем найти родителя form
.