jquery attr值返回undefined,如果value是一个大数字,则返回0

时间:2012-09-07 10:54:54

标签: jquery attr

首先,如果因为我已经搜索了很多个小时这个问题,我很抱歉。请忍受我的问题。让我详细说明一下。我正在为具有“value”属性的select元素动态添加选项,如简单的10位数电话号码,如7465768574&文本为“名称(PhoneNumber)”,当用户选择时,将添加到无序列表以显示用户选择的选项。为了删除该列表项,我提供了一个图像,在点击时首先检查选择元素中是否有相应的选项。然后从无序列表&中删除相同的列表项从select元素中删除相应的选项。现在,为了实现这一点,我正在检查'value'属性。问题是,如果该值属性是电话号码之类的大数字,我的逻辑会失败,因为jQuery无法正确提取该值。如果它是一个非常大的数字,它返回0,如果它的范围是6,000,000,000到7,000,000,000(逗号不存在值)它返回一些随机数。我不知道问题是什么。它与价值类型或其他东西有关。

<select multiple="multiple" id="select1">  
     <option class="selectedoptions" value="8234567890">Joker(8234567890)</option>  
     <option class="selectedoptions" value="2">Batman(2)</option>  
     <option class="selectedoptions" value="3">Superman(3)</option>  
     <option class="selectedoptions" value="4">Spiderman(4)</option>
     <option class="selectedoptions" value="5">Ironman(5)</option> 
     <option class="selectedoptions" value="6">Thor(6)</option> 
     <option class="selectedoptions" value="7">Loki(7)</option>
</select>  

我的jQuery代码是

        function removeSelected() {
            var check = $(this).parent().attr('value');
            var parent = $(this).parent();
            $('#select2 option').each(function () {
                if ($(this).attr('value') == check) {
                    $(this).remove().appendTo('#select1');
                    parent.remove();
                    return true;
                }
                return true;
            });
            return true;
        }

当我使用FireBug调试此代码时,我可以看到,对于较大的数字,“check”为0,&amp;对于某些范围小于8,000,000,000的返回随机数。对于较小的数字,它完美地工作。

另外如果我尝试.val()而不是.attr('value')firebug show error

TypeError: (c.value || "").replace is not a function

先谢谢你们。

编辑1:好的。似乎我动态添加List Item的jQuery代码在列表Item中引入随机数作为值。但问题仍然存在。我可以看到我的代码(通过firebug)在创建List Item时添加了适当的值,但生成的List Item没有反映它。

编辑2:回应罗纳尔奇先生。对不起。需要一个背景。我所拥有的是以下。 2选择元素“select1”&amp; “select2”&amp;无序列表“selectedlist”。用户可以从“select1”选项中选择。将其移至“select2”。 &安培; “select2”选项将/应反映为“selectedlist”的列表项。我有一个函数removeSelected绑定到列表项内的图像。

<li class="selectedlistItems" value="8123456789">
Joker(8123456789)
<a class="search-choice-close" href="#"> </a>
</li>

现在我正在尝试迭代“select2”和&amp;的选项。检查哪个选项与此列表项具有相同的值。 “check”是列表项的“值”&amp;

$(this).attr('value')

是“select2选项”值。 如果匹配则

$(this).remove().appendTo('#select1');

删除“select2选项”&amp;将其附加到“select1” 在哪里

parent.remove();

删除列表项,以便无序列表始终反映“select2”元素。

我想这个背景将足以理解我想要做的事情。我是jquery&amp;的新手。一般我发帖问题,我只是找到答案,这是我的第一个问题。我已经感谢这种快速反应了。

编辑3:检查此jsFiddle以了解情况。 http://jsfiddle.net/ygaurav/vUgym/

2 个答案:

答案 0 :(得分:0)

attr()肯定适用于大数字,因为它只返回一个字符串。

我在jsfiddle上尝试了你的代码。当然,它缺少一些细节,所以我只是创造性地添加了它。然后我修复了一些看似不正确的代码。无论如何,它现在正在运作。

http://jsfiddle.net/QA5nk/1/

更改包括以下几行:

var check = $(this).attr('value'); // instead of looking for the parent
...
// parent.remove(); // this line is removing what is already removed

您尝试删除了两次,这也使页面爆炸,所以我评论了这一点。

答案 1 :(得分:0)

这是因为,当您将其分配到'value'元素的<li>属性时,此'value'属于'number'类型。这就是为什么它会导致溢出并且你得到一个垃圾值。

为什么不使用自定义属性,我的意思是代替'value'使用其他自定义属性。防爆。说'toonId'

$('#list').append($("<li></li>").html(Joker(8123456789)'<a class=search-choice-close href=#></a>').attr('toonId', "8234567890"));

渲染时,它的外观如下:

<li class="selectedlistItems" toonId="8234567890">Joker(8123456789)<a class="search-choice-close" href="#"> </a></li>

这将为<li>项添加新属性,您可以随后在任何地方访问'toonId'属性。

希望这会有所帮助。