Как поместить код jQuery в один файл, на который будут ссылаться все страницы?

#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 .