Jquery表单提交,防止默认,unbind ->然后提交,我做错了什么?

at0kjp5o  于 2023-06-29  发布在  jQuery
关注(0)|答案(1)|浏览(107)

好吧,所以我在过去的三天里一直在挠头。我不知道我做错了什么。
下面是HTML结构:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Test</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<form class="form" action="test2.php" method="get" autocomplete="off">
                
    <label class="form__label" for="services">
        <span class="form__icon form__icon--service"><img src="./img/service.svg" alt="pencil"></span>
        <input class="form__input form__input--service" id="services" name="services" type="text" placeholder="What service do you need?" autocomplete="off">
    </label>
                    
    <label class="form__label form__label--location" for="location">
        <span class="form__icon form--icon--location"><img src="./img/location.svg" alt="location"></span>
        <input class="form__input form__input--location" id="location" name="location" type="number" placeholder="Location" pattern="[0-9]*" inputmode="numeric" autocomplete="off">
    </label>
    <button class="form__btn" type="submit">
        Search
    </button>
    <input id="category" name="category" type="hidden" value="0" autocomplete="off">
    <input id="service_type" name="service_type" type="hidden" value="0" autocomplete="off">
</form>

<script src="./js/test.js"></script>
</body>
</html>

下面是test.js函数:

//SUBMIT FORM AND BASIC VALIDATION
$(document).ready(function() {
    // Form submission handler
    $('.form').on('submit', function(event) {
      event.preventDefault(); // Prevent the form from submitting normally
  
      // Get form input values
      var services = $('#services').val();
      var location = $('#location').val();

      // basic format validation //

      // Validation passed, submit the form
      $(this).unbind('submit'); // Unbind the current submission handler
  
      // Construct the action URL with the form values
      var actionUrl = $(this).attr('action');
      actionUrl += '?services=' + encodeURIComponent(services);
      actionUrl += '&service_type=' + encodeURIComponent($('#service_type').val());
      actionUrl += '&category=' + encodeURIComponent($('#category').val());
      actionUrl += '&location=' + encodeURIComponent(location);

      //console.log('actionUrl:', actionUrl);
  
      // Navigate to the constructed URL (not preferred)
      //window.location.href = actionUrl;

      $(this).attr('action', actionUrl);

      $(this).submit();

    });
  });

我想做的是,阻止表单最初提交,做一些事情,然后用新参数更改表单的操作URL。
一切都很好,只有一个例外,那就是让我发疯。当我构建actionUrl时,我试图以特定的顺序获取变量:
?services=&service_type=0&category=0&location=(特别是我希望位置是最后一个)
如果我注解掉//$(this).submit();,我可以在控制台日志中看到url正在按照我想要的方式构建。
但是,如果我提交表格,终点是:?services=&location=&category=0&service_type=0
双U型T恤我疯了!!!
任何帮助指出我错过了什么是非常感谢

x6yk4ghg

x6yk4ghg1#

你的问题是

$(this).submit();

调用jquery提交处理程序...你刚把它拿走了
如果你想在jquery提交处理器中调用/继续“真实的的”提交,请将这一行改为:

this.submit();

所以它调用浏览器的form.submit()而不是jquery的$("form").submit()。它们具有相同的名称,但它们不是相同的功能。
注意:unbind很久以前就被弃用了,请考虑改为.on().off()

相关问题