0

首先,我很抱歉如果问了这样的问题,因为我已经搜索了很多小时。请忍受我的问题。让我详细说明。我正在动态地将选项添加到具有“值”属性的选择元素,例如简单的 10 位电话号码(如 7465768574)和文本为“名称(电话号码)”,当用户选择时,将其添加到无序列表中以显示用户选择的选项。为了删除该列表项,我提供了一个图像,单击该图像首先检查选择元素中是否存在相应的选项,然后从无序列表中删除相同的列表项并从选择元素中删除相应的选项。现在,为了实现这一点,我正在检查“价值”属性。问题是如果该值属性是像电话号码这样的大数字,我的逻辑失败了,因为 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 调试此代码时,我可以看到对于较大的数字,“检查”为 0,并且对于小于 8,000,000,000 的某个范围,它返回的随机数。对于较小的数字,它可以完美地工作。

另外,如果我尝试 .val() 而不是 .attr('value') 萤火虫显示错误

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

提前谢谢各位。

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

编辑 2:回应 ronalchn 先生。对不起。需要一个上下文。我所拥有的正在关注。2 选择元素“select1”和“select2”和一个无序列表“selectedlist”。用户可以从“select1”中选择选项并将其移动到“select2”。&“select2”选项将/应该反映为“selectedlist”的列表项。我有一个函数 removeSelected 绑定到列表项内的图像。

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

现在在函数中,我试图遍历“select2”的选项并检查它的哪些选项具有与此列表项相同的值。"check" 是列表项的 "value" &

$(this).attr('value')

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

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

删除“select2 选项”并将其附加到“select1”,其中

parent.remove();

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

我想这个上下文足以理解我想要做什么。我是 jquery 的新手,通常我会发布问题,我只是找到答案,这是我的第一个问题。我已经很感谢这么快的反应。

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

4

2 回答 2

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

您尝试两次删除某些内容,这也使页面炸毁,所以我将其注释掉。

于 2012-09-07T11:17:07.250 回答
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'属性。

希望这会有所帮助。

于 2012-09-14T10:05:41.963 回答