【问题标题】:jquery not working with if statementjquery 不能使用 if 语句
【发布时间】:2018-01-27 01:50:25
【问题描述】:

我正在使用带有 ajax 更新方法的 jquery 脚本,该方法绑定到表单元素的焦点事件。它有效,但我首先要检查表单元素是否为空。一旦我这样做,该功能就会停止工作。下面是代码:

<script type="text/javascript">
    if ($('#txt_updateone').val().trim().length > 0) {
        function single_change(txt_updateone) {
            $.ajax({
                type: "POST",
                data: { "txt_updateone": 1 },
                url: "single_scorechange.php",
                success: function (data) {
                    $('#listinscore').load(document.URL + '#listinscore');

                },
                error: function (xhr) {
                    alert("error");
                }

            });

            return false;

        }
    }
</script>

txt_updateone 是一个文本区域,onfocus 事件调用 single_change 函数。当我在第二行删除 if..... 时,它可以工作,但我希望它只有在 textarea 不为空时才能工作。

【问题讨论】:

  • 在函数内移动if 语句?
  • 你的脚本是否在你的元素 #txt_updateone 之后?

标签: php jquery mysql database forms


【解决方案1】:

有两种方法。

1) 在调用此函数的地方验证数据。

2) 在使用beforeSend 发送ajax 请求之前验证数据。

<script type="text/javascript">
    function single_change(txt_updateone) {
        $.ajax({
            type: "POST",
            data: { "txt_updateone": 1 },
            url: "single_scorechange.php",
            success: function (data) {
                 $('#listinscore').load(document.URL + '#listinscore');
            },
            beforeSend: function(xhr) {
                alert("Enter some value");
                return $('#txt_updateone').val().trim().length > 0 ? true: false;
            }
            error: function (xhr) {
                alert("error");
            }
        });
        return false;
    }
</script>

【讨论】:

  • 这个是最好的。+1
  • 感谢一百万 Nagarjiun!它完美地工作!再次感谢您!
【解决方案2】:

把你的代码改成

function single_change(txt_updateone) {
  if ($('#txt_updateone').val().trim().length > 0) {
    $.ajax({
        type: "POST",
        data: {
          "txt_updateone": 1
        },
        url: "single_scorechange.php",
        success: function(data) {
          $('#listinscore').load(document.URL + ' #
              listinscore ');

            },
            error: function(xhr) {
              alert("error");
            }

        });

      return false;

    }
  }

您需要在方法内部执行if 检查。

【讨论】:

    【解决方案3】:

    正如你在函数之前提到的if 条件,函数实际上是在那里声明的。所以你正在调用未定义的函数。

    function single_change(txt_updateone) {
        if ($('#txt_updateone').val().trim().length < 1) {
            //form element is empty
            return false;
        }
        $.ajax({
            type: "POST",
            data: { "txt_updateone": 1 },
            url: "single_scorechange.php",
            success: function (data) {
                $('#listinscore').load(document.URL + '#listinscore');
    
            },
            error: function (xhr) {
                alert("error");
            }
    
        });
    
        return false;
    }
    

    【讨论】:

    • 只有一个退出函数总是最好的,现在你有两个,但也可以。
    • 它被称为 early return 而不是将整个 ajax 调用包装到 if 循环中。这提高了可读性。
    • @tilz0R 是编码风格,你不需要为此投反对票。比较你和我的答案,看看哪一个更易读?
    • @Thamaraiselvam 你正在做反对 OP 需要什么。他需要,如果长度大于 0,那么只有 ajax 会运行。你正在做相反的事情
    • 感谢@AlivetoDie 指出问题。我没看到。
    【解决方案4】:

    只需交换函数和 if 语句

    //Declare function in all cases
    function single_change(txt_updateone) {
        //When you call function, check if statement.
        if ($('#txt_updateone').val().trim().length > 0) {
            $.ajax({
                type: "POST",
                data: { "txt_updateone": 1 },
                url: "single_scorechange.php",
                success: function (data) {
                    $('#listinscore').load(document.URL + '#listinscore');
    
                },
                error: function (xhr) {
                    alert("error");
                }
            });
            return false;
        }
    }
    

    【讨论】:

      【解决方案5】:

      你正在做的是定义你的函数只有当文本区域是非空的(很可能当这段代码运行时,它可能是空的)。我认为您的意思是始终定义函数,但仅在文本区域有内容时才执行正文。

      如果这是你想要的,这可能会奏效:

      <script type = "text/javascript">
        function single_change ( txt_updateone ) {
          var content = $('#txt_updateone').val().trim();
          if (!content.length) { return; }
          // now execute function with non-empty content.
        }
      
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-22
        • 1970-01-01
        • 2010-11-21
        • 1970-01-01
        • 2014-09-15
        • 2013-03-05
        • 1970-01-01
        相关资源
        最近更新 更多