【问题标题】:How to automatically run a jQuery script, without having to click submit?如何自动运行 jQuery 脚本,而无需点击提交?
【发布时间】:2015-02-26 10:37:03
【问题描述】:

我目前正在经营一家在线商店。我已经成功编写了一个脚本来计算产品的价格,并在用户单击“更新价格”按钮时在产品页面上显示该价格。有没有办法在没有提交按钮的情况下做到这一点?换句话说:有没有办法让价格自动显示和更新?

(我没有包含我的 .php 文件,因为它使用数据库中的数据。)

任何帮助将不胜感激!

<form action="/" id="updatePrice">
  <h3>Size</h3>
  <select class="form-control" id="sizejquery" name="size">
    <option>A0</option>
    <option>A1</option>
    <option>A2</option>
  </select>
  <h3>Type of paper</h3>
  <select class="form-control" id="paperjquery" name="paper">
    <option>white coated paper</option>
    <option>photo paper</option>
  </select>
  <h3>Quantity</h3>
  <select class="form-control" id="quantityjquery" name="quantity">
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
  </select>
  <br>
  <input class="btn btn-default" type="submit" value="update price">
</form>
<div id="price">
  <h3>$0.00</h3>
</div>

<script>
  // Attach a submit handler to the form
  $("#updatePrice").submit(function(event) {

    // Stop form from submitting normally
    event.preventDefault();

    // Get some values from elements on the page:
    var $form = $(this),
      size = $form.find("#sizejquery").val(),
      paper = $form.find("#paperjquery").val(),
      quantity = $form.find("#quantityjquery").val(),
      url = $form.attr("action");

    // Send the data using post
    var posting = $.post(url, {
      size: size,
      paper: paper,
      quantity: quantity
    });

    // Put the results in a div
    posting.done(function(data) {
      var content = $(data).find("#content");
      $("#price").empty().append(content);
    });
  });
</script>

【问题讨论】:

  • 你有很多可以使用的事件,你应该使用它来达到你的目标,看看它们HERE 例如,你可以使用 keyup() 更改产品的数量你可以做任何你想做的事情,比如获取进程并更新它。
  • 您希望多久运行一次更新?
  • @LShetty 好问题!我还没有真正考虑过。我想我希望在用户加载页面时“更新”价格(我认为我必须使用准备好的文档)以及当用户更改选择框的值时。
  • 我又做了一次更新。要使其正常工作,请将按钮类型更改为“按钮”而不是“提交”

标签: php jquery ajax submit live


【解决方案1】:

您可以在数量下拉广告上注册 blur() 事件,然后推送结果。 我已经修改了脚本。请查看它是否适用于您的实施。

<script>
$(document).ready(function(){

$("#quantityjquery").blur(function(){

    // Get some values from elements on the page:

      var size = $("#sizejquery").val();
      var paper = $("#paperjquery").val();
      var quantity = $("#quantityjquery").val();
      var url=$("#updatePrice").attr("action");

// Send the data using post

var posting = $.post(url, {
      size: size,
      paper: paper,
      quantity: quantity
    });

      // Put the results in a div

    posting.done(function(data) {
      var content = $(data).find("#content");
      $("#price").empty().append(content);
    });
});

});
</script>

【讨论】:

    【解决方案2】:

    好吧,那么,试试下面的方法:

    $(function() {
      $formBtn = $("#updatePrice").find("input.btn-default");
      $formBtn.on("click", function(event) {
        //all your code (the one you already have) here....
    
      });
    
      $(window).on("load", function() {
        $formBtn.trigger("click");
      });
    
      $("#updatePrice").on("change", ".form-control", function() {
        $formBtn.trigger("click");
      });
    });
    

    完整代码:

    $(function() {
        $formBtn = $("#updatePrice").find("input.btn-default");
        $formBtn.on("click", function(event) {
            // Stop form from submitting normally
            event.preventDefault();
            // Get some values from elements on the page:
            var $form = $("#updatePrice"),
                size = $form.find("#sizejquery").val(),
                paper = $form.find("#paperjquery").val(),
                quantity = $form.find("#quantityjquery")
                .val(),
                url = $form.attr("action");
            // Send the data using post
            var posting = $.post(url, {
                size: size,
                paper: paper,
                quantity: quantity
            });
            // Put the results in a div
            posting.done(function(data) {
                var content = $(data).find(
                    "#content");
                $("#price").empty().append(
                    content);
            });
        });
        $(window).on("load", function() {
            $formBtn.trigger("click");
        });
        $("#updatePrice").on("change", ".form-control", function() {
            $formBtn.trigger("click");
        });
    });
    

    【讨论】:

    • 谢谢!我一定做错了什么,因为我的页面现在立即跳转到白色。这是网站:meulen.me/store.php(点击产品可以看到通常显示产品信息+价格的页面)。
    • @meulendev,不确定你做了什么,但试试我的编辑,看看你的进展如何。
    • 我已经复制了您的代码,并在告诉我这样做的评论之后包含了我的原始代码。出于某种原因,它会非常简短地显示产品页面,然后将我重定向到实际的 php 文件(计算价格的文件)。 meulen.me/product.php?type=9
    • 我认为只是我的 jQuery 知识阻止了它的工作,但我已经包含了更改,结果如下:meulen.me/product.php?type=13
    • @meulendev,用最少的信息进行调试有点困难。我已经编辑了我的答案,添加了你的完整代码。
    【解决方案3】:

    在 jquery 中的文档就绪 api 中调用该方法为

    $(document).ready(function(){
    // your logic
    
    });

    就您的代码而言

    function fetchPrice(){
        // Stop form from submitting normally
        event.preventDefault();
    
        // Get some values from elements on the page:
        var $form = $(this),
          size = $form.find("#sizejquery").val(),
          paper = $form.find("#paperjquery").val(),
          quantity = $form.find("#quantityjquery").val(),
          url = $form.attr("action");
    
        // Send the data using post
        var posting = $.post(url, {
          size: size,
          paper: paper,
          quantity: quantity
        });
    
        // Put the results in a div
        posting.done(function(data) {
          var content = $(data).find("#content");
          $("#price").empty().append(content);
        });
    }
    
    $(document).ready(function(){
        fetchPrice(); // calls as the page load complete
    });

    希望对您有所帮助..........

    【讨论】:

    • var $form = $(this), 将尝试使用 window 对象构造一个 jQuery 对象。我不确定这会产生什么影响,但url = $form.attr("action"); 肯定会失败。
    • 谢谢,但您的代码对我不起作用! :/ 当我尝试它时,它没有显示价格,而是什么都不显示,并使占位符价格(0.00;这个价格通常被实际价格取代)消失了。
    猜你喜欢
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多