【问题标题】:jQuery Array interpretationjQuery 数组解释
【发布时间】:2010-07-21 11:31:06
【问题描述】:

我构造了一个数组,稍后我将使用它来比较一些值。 我使用这段代码来构造“myArray”,稍后我将使用它:

var optionTexts = [];  
$('#stripeMeSubSubCat tr').each(function(){

 if ($(this).find('input:checkbox.subsubcat_chkclass:not(:checked)').length == 0)
 {
   subsubrow_cat_id_no = parseInt($(this).closest("tr").attr("id")); 

   optionTexts.push(subsubrow_cat_id_no);
  };   

 });

var myArray = optionTexts.join(', ');
alert("myArray = "+myArray);

这里我用myArray做个对比:

$('#stripeMeSubSubCat tr').each(function(){  

     myindex = $.trim($(this).closest("tr").attr("id"));
     var arr = [myArray];

     //var arr = [0, 439, 52, 53];

     myindex = parseInt(myindex);

     alert(myindex);
     alert(arr);

     if ((jQuery.inArray(myindex, arr)) == -1) {
       var equal = "FALSE";
     } else {
       var equal = "TRUE";
     $("#stripeMeSubSubCat tr[id='" + myindex + "'] input").attr('checked', true);
     };

     alert(equal);
 });

就像上面的代码一样,它总是返回 FALSE。 但是,如果不使用第一块代码而只启用注释掉的 var arr(我将数组设置为固定数据),它会在应该返回的位置返回 TRUE。

有什么想法吗?

【问题讨论】:

    标签: jquery arrays


    【解决方案1】:

    myArray 是通过连接 optionsText 数组的元素创建的字符串变量,而不是一组元素。您应该检查 optionsText 而不是 myArray。

    if ((jQuery.inArray(myindex, optionsText)) == -1) {
    

    顺便说一句,为什么将变量equal 设置为字符串“FALSE”或“TRUE”——为什么不简单地将其设置为falsetrue(布尔值)?

    【讨论】:

    • 如果我保持 myindex = parseInt(myindex);最奇怪的事情现在发生了。当我从代码中删除警报时,它不会更改复选框的属性。怎么样?
    • @andreas7 - 我不知道你上面的代码是如何工作的,因为myArray 不是一个,因此arr 是一个只包含单个元素的数组——@ 的值987654327@。即使myarray 是一个数组,arr 也将是一个包含单个元素的数组,而它本身恰好是一个数组。我可以看到你必须在哪里将 myIndex 转换为数值,否则你会将字符串与数字进行比较,但我认为你得到了虚假的结果,你真的应该检查 optionsText 的值。
    • 我已经按照您的建议进行了更改,因此没有在任何地方使用 myArray。只要警报在代码中,它就可以正常工作。如果我删除它们,它就不起作用。是否存在同步问题,我该如何处理?
    • @andreas7 - 是在 DOM 准备好后使用 ready 方法执行的全部内容。 $(function() { ...your code here... });
    • 我的整个代码都在 $(document).ready(function() { HERE});
    【解决方案2】:

    myArray是一个字符串,结果是

    var myArray = optionTexts.join(', ');
    

    稍后,您尝试将其更改回数组:

    var arr = [myArray];
    

    这实际上将创建一个数组,其中myArray 字符串作为第一个也是唯一的元素。请改用split(", ")

    var arr = myArray.split(", ");
    

    【讨论】:

    • 我添加了更改您的建议并删除了 myindex = parseInt(myindex);它奏效了!感谢您的及时回复和回复。
    • 最奇怪的事情现在发生了。当我从代码中删除警报时,它不会更改复选框的属性。怎么样?
    • @andreas7:我实际上没有看到您在哪里设置了myindex 属性。此外,虽然这可能不是问题的原因,但 id 属性 must start with a letter - 它们不能只是数字。
    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 2023-04-03
    • 2010-12-31
    • 1970-01-01
    • 2021-10-31
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多