【问题标题】:javascript .push() doesn't seem to workjavascript .push() 似乎不起作用
【发布时间】:2010-05-09 02:39:47
【问题描述】:

我正在尝试使用 .push 将项目放入 javascript 数组中。我创建了一段简化的代码。当我单击 ID 为 clickButton 的按钮时,我希望收到一系列带有数字的警报,但我什么也没得到。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Sempedia | Making computers think about data the way we do</title>
 <link href="css/styles.css" rel="stylesheet" type="text/css" />
 <script type="text/javascript" src="js/jquery.js"></script>
 <script>
    $(document).ready( function() {
    var myArray = new Array(); //declare the array

    for(var i=0;i<=10;i++){   // create a loop
        myArray.push(i);  // add an item to array
    }

    $("#clickButton").live('click',function() {  //register the button being clicked
    for(var j=0;j<=10;j++){    //for loop
        alert(myArray[j]);   //alert one item in the array
        }
    });

});
 </script>
 </head>
 <body>
 <input type="button" value="click me" id="clickButton" />
 </body>
 </html>

【问题讨论】:

  • 代码看起来不错,请确保 jQuery 确实被包含...
  • 当您遇到编程问题时,您应该始终做的第一步是检查错误消息。
  • 您可以使用[] 代替new Array() 创建一个空数组。

标签: javascript arrays


【解决方案1】:

Works 给我。您可能在页面的其他地方有错误。

【讨论】:

  • 正如 CMS 指出的那样,这是 jquery 未包含的问题。
【解决方案2】:

这里是帮助您参考 jquery 库的 url。 http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js

【讨论】:

    【解决方案3】:

    使用有效的html,见http://validator.w3.org/

    不要包含"//for loop"等无用的cmets;如果有人不认识 for 循环,那么该注释肯定不会有太大帮助。这些 cmets 对任何人都没有任何帮助。

    重要的是简化和删除与问题无关的所有内容,例如link 标记。这将有助于更清楚地了解代码在做什么。

    当你在做这件事时,放下 jQuery 并学会理解你在做什么。

    在过去两年中,jQuery 的使用急剧增加。它现在被用于各种各样的事情;不使用 jQuery 不仅可以实现微不足道的事情,而且不使用 jQuery 可以更轻松地完成这些事情。这通常伴随着抱怨代码没有做它想要的事情,而要知道为什么需要对相关技术有非常基本的了解。

    现在解决您的问题。您希望它工作,但它没有[1]。

    您需要解决的问题是触发事件处理程序。如果需要委托策略,例如您尝试使用 jQuery live,那么可以通过在文档上添加一个点击回调来检查目标并相应地处理它。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
    <html>
     <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <title>Me | Trying to make you think</title>
     <script type="text/javascript">
    (function(){
        var myArray = [1,2,3];
    
        document.onclick = function(ev) {
            var target = getTarget(ev);
            if (target && target.id == "clickButton") {
                handleClickButtonClicked();
            }
        };
    
        function handleClickButtonClicked() {
            alert(myArray);
        }
    
        function getTarget(ev) {
            ev = ev || window.event;
            return ev ? ev.target || ev.srcElement : null;
        }
    })();
     </script>
     </head>
     <body>
     <p><input type="button" value="click me" id="clickButton"></p>
     </body>
    </html>
    

    但是,鉴于您的能力水平,我建议您更简单,直接向按钮添加 onclick 事件处理程序。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
    <html>
     <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
     <title>Me | Trying to make you think</title>
     <script type="text/javascript">
        var myArray = [1,2,3];
     </script>
     </head>
     <body>
     <p><input type="button" value="click me" onclick="alert(myArray)" id="clickButton"></p>
     </body>
    </html>
    

    [1]http://jibbering.com/faq/notes/posting/#ps1DontWork

    【讨论】:

      【解决方案4】:

      我不知道我做了什么,但它突然开始工作。相同的代码,因为我在玩了不同的可能解决方案后又回到了开始。编码魔法。

      我在它开始运行之前尝试过这样做,但后来我删除了 []。

          const recipeData = [{
            id: (Math.random() * 100).toString(),
            title: enteredTitle,
            image: enteredImg,
            ingredients: enteredingredients,
            description: enteredDescription,
          }];
      

      【讨论】:

        【解决方案5】:

        在 document.ready 函数范围之外声明 myArray。例如:

        <script> 
          var myArray = new Array(); //declare the array
          $(document).ready( function() { 
        
            for(var i=0;i<=10;i++){   // create a loop 
                myArray.push(i);  // add an item to array 
            } 
        
            $("#clickButton").live('click',function() {  //register the button being clicked 
            for(var j=0;j<=10;j++){    //for loop 
                alert(myArray[j]);   //alert one item in the array 
                } 
            }); 
        
        }); 
         </script>
        

        【讨论】:

        • 那不会有什么不同。
        • 我确信这在技术上是正确的,myArray 肯定不会在其他任何地方使用,除了使用海报代码准备好的文档。不确定答案是否值得一票否决。
        • 你错了;标识符 myArray 在回调函数的范围内。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 2010-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多