【问题标题】:Can you run a JS if statement and for loop inside a line of JQuery?您可以在一行 JQuery 中运行 JS if 语句和 for 循环吗?
【发布时间】:2013-07-27 23:35:16
【问题描述】:

我对学习 Javascript 和 Jquery 都很陌生。

在我正在创建的网站中,我试图在一行 JQuery 中插入一个 Javascript if 语句和一个 for 循环。最后一次确认没有运行。我怀疑是 if 语句导致了这个问题。我怎样才能解决这个问题?这是我的代码的样子。

$(document).ready(function() {
    $(".button3").click(function() {
        var lastname = $('#lastnameresponse').val();
        confirm("You're last name is" + " " + lastname);
        if (userResponse = "girl") {
            for (var i = 0; i <= girlnames.length; i++) {
                confirm("Your future daughter's name is" + " " + random + " " + randomagain + " " + lastname);
            })
    });

【问题讨论】:

  • 这看起来不像完整的代码。 userResponse 是什么?
  • userResponse = "girl""girl" 分配给userResponse。使用=====。您之前犯的相同错误:stackoverflow.com/a/17002680/139010
  • 你的 for 循环后面也有一个杂散的括号。
  • 我没有包含我定义 userResponse 的部分。我修复了比较运算符,但代码仍然没有运行。

标签: javascript jquery if-statement for-loop


【解决方案1】:

很多对您的代码没有多大意义。

首先,userResponse 是什么?这是在哪里定义的,在哪里设置?你有没有在调试器下验证过它确实等于“女孩”?

其次,您可能打算在这里使用比较等于而不是赋值等于

if (userResponse = "girl") { // This should be ==

但是,这不应阻止块运行。事实上,它会强制块始终运行,因为“girl”是真实的。

第三,girlnames是什么?它是一个数组吗?这是在哪里定义的?您是否确认它确实包含有效的项目?

最后,我相信您的 for 循环不正确:

for (var i = 0; i <= girlnames.length; i++) {

应该是:

for (var i = 0; i < girlnames.length; i++) {

数组从 0 开始,因此 girlnames[girlnames.length] 不是有效项。

但是,考虑到您没有在任何地方使用循环中的i 变量,这也不应该实际上导致任何错误。

我会使用脚本调试器(在现代浏览器中通常为 F12)逐行遍历您的代码,并在以下位置设置断点:

var lastname = $('#lastnameresponse').val();

然后验证每一行的行为是否正确。如果这仍然不起作用,您需要发布更多代码,以便我们更好地了解发生了什么。

更新:

根据您的评论:

这里是定义 userResponse 变量的地方: $(document).ready(function(){ $("#girlimg").click(function() { var userResponse = prompt("确认您选择的性别").toLowerCase; $('html, body').animate({ scrollTop: $(".LastName").offset().top }, 2000);

似乎userResponse#girlimg 标签的点击处理程序中被声明:

$("#girlimg").click(function() {
    // Everything declared here is local to this function
    var userResponse = confirm(); // local variable
});

因此,.button3 的点击处理程序将无法访问它。您需要在两个函数都可以访问的范围内声明 userResponse。可能是全局的(这在 JavaScript 中是不受欢迎的)或在您的 $(document).ready() 代码中,前提是在该块中定义了两个单击事件处理程序。

【讨论】:

  • 嗨,迈克,这是我经常犯的错误。但是我确实进行了更改,不幸的是代码仍然无法正常工作。还有其他想法吗?
  • 当然。 userResponse 在哪里定义?你确认它确实等于 *girl"?girlnames 是在哪里定义的?它是一个数组吗?你确认它有多个值要迭代吗?你是否尝试过使用脚本调试器调试此代码?
  • girlnames 是一个数组,这里定义了 userResponse 变量: $(document).ready(function(){ $("#girlimg").click(function() { var userResponse = prompt("确认你选择的性别").toLowerCase; $('html, body').animate({ scrollTop: $(".LastName").offset().top }, 2000);
  • @user2466886 - 从您的评论来看,userResponse 似乎是该点击处理程序的本地。它不能在该函数之外访问。
【解决方案2】:

首先:它是Your 而不是You're :)

其次,userResponse 未定义。也许它是在其他地方定义的。

为了比较,请使用== 运算符。

你确定这是你想做的吗?我看到你那里也有confirm。 像这样使用confirm

$(".button3").click(function() {
    var lastname = $('#lastnameresponse').val();
    // confirm() returns true or false, depending on the clicked button
    is_confirmed = confirm("You're last name is" + " " +lastname);
    if (true == is_confirmed) {
        for (var i = 0; i <= girlnames.length; i++) {
            confirm ("Your future daughter's name is" + " " + random + " " + randomagain + " " +   lastname);
        }
    }
});

girlnames 也没有在这里定义(可能在其他地方)。 randomrandomagain 也一样

至于“在”jQuery 中编写 JavaScript:不存在这样的问题。 jQuery 是一个用 Javascript 编写的库,它提供了有用的功能来简化开发。

【讨论】:

  • 我对确认的工作原理仍然有些困惑。您的建议确实使代码运行,但没有得到最后一次确认(在 for 循环之后)运行。所有其他变量都是之前定义的。
  • 最后一个confirm() 不起作用,除非girlnames 被定义为至少包含一项的数组。阅读 confirm 和 javascript 中的数组
【解决方案3】:

以下语句不包含正确的 JavaScript 比较运算符

等于写成 ==

if (userResponse = "girl") {

参考看看here

【讨论】:

    【解决方案4】:

    你忘了关闭一些箭头,无论如何你放的时候:

    if (userResponse ="girl"){...}  
    

    您将 userResponse 变量设置为“girl”,并且只将值传递给变量
    签入 userResponse 等于 "girl" 你应该放

    if (userResponse =="girl")
    

    您的最终代码将如下所示

     $(document).ready(function(){
    $(".button3").click(function() {
    var lastname = $('#lastnameresponse').val();
    confirm("You're last name is" + " " +lastname);
    if (userResponse ="girl") {
        for (var i = 0; i <= girlnames.length; i++) {
        confirm ("Your future daughter's name is" + " " + random + " " + randomagain + " " +   lastname);
        }}}
    )
    });
    

    p.s:你忘记关闭太多箭头

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多