2010-07-16 22 views
0

我有以下幾點:jQuery的數組問題

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

$("#myVal#").blur(function() { 
    var arr = jQuery.makeArray( $("#myArr").val()) 
if ($("#myVal").val().indexOf(arr) == -1 || $("#myVal").val().indexOf(arr) ==0) { 
    arr.push($("#myVal").val()); 
} 
$("#myArr").val(arr) 
}); 
}); 
</script> 
<form action="" method="post" name="myF" id="myF"> 
<input type="text" name="myVal" id="myVal" value=""> 
<input type="text" name="myArr" id="myArr" value=""> 
<br/> 
<input type="submit" name="submit" id="submit" value="go"> 
</form> 

我試圖檢查,看看如果一個特定的值進入到設爲myVal已經在myArr,該。如果是這樣,請不要添加到數組中。如果不是,則添加到數組中。但是,數組不斷增加重複值。

我在做什麼錯?

在此先感謝。

回答

1

首先,makeArray是指採取陣列狀物體作爲輸入,而不是字符串。我在這裏看不到目的。如果你有一個實際的數組arr(可能使用split做),你可以這樣做:

if ($.inArray($("#myVal").val(), arr) == -1) 

您當前的代碼調用String.indexOf(arr),所以arr被隱式轉換爲(以逗號分隔)的字符串。然後在新值中搜索數組字符串。這顯然不是你想要的。

2

嘗試改變

$("#myVal#").blur(function() { 
     ^^^ 

$("#myVal").blur(function() { 
     ^^^ 
+0

我想我需要一些咖啡。謝謝 – CFNinja 2010-07-16 16:00:44

1

我相信你在做什麼是這樣使用$.inArray()後:

$(function() { 
$("#myVal").blur(function() { 
    var arr = $("#myArr").val().split(','); 
    if ($.inArray($("#myVal").val(), arr) == -1) arr.push($("#myVal").val()); 
    $("#myArr").val(arr.join(',')); 
}); 
});​ 

Try a demo here,現在如果貨值錄得一個逗號,這將打破...只是選擇適當的分隔符。這是怎麼回事,將.split()變成一個數組,在提供的分隔符處分割項目,如果缺失則添加值($.inArray()返回元素的位置,如果未找到則返回-1) 。然後,我們只需使用相同的分隔符號.join()即可將其重新轉換爲字符串。

+0

尼克,很甜蜜! – CFNinja 2010-07-16 16:37:51

0

這並獲得成功:

$().ready(function() { 
    var arr = []; 
    $("#myVal").blur(function() { 
     if ($.inArray($('#myVal').val(), arr) == -1) { 
      arr.push($("#myVal").val()); 
     } 
     $("#myArr").val(arr); 
    }); 
});