2012-09-07 148 views
0

首先我很抱歉如果因为我一直在寻找很多小时而问这样的问题。请忍受我的问题。让我详细说明一下。我使用“value”属性动态地将选项添加到具有“value”属性的选择元素,如简单的10位电话号码,如7465768574 &文本作为“Name(PhoneNumber)”,当用户选择时,将其添加到无序列表中以显示Users selected选项。要删除该列表项,我提供了一个图像,点击时首先检查选择元素&中是否存在相应的选项,然后从无序列表中删除相同的列表项。&从select元素中删除相应的选项。现在,为了实现这一点,我正在检查'值'属性。问题是,如果该值属性是电话号码的大数字,我的逻辑失败,因为jQuery不能正确提取该值。如果它是一个非常大的数字,它将返回0,如果它的范围在60亿到70亿之间(逗号不存在),它将返回一些随机数。我不知道问题是什么。这与价值类型或某事有关吗?jquery属性值返回undefined,如果值很大,则返回0

<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,&一些范围较小的超过80亿的返回随机数字。对于较小的数字,它的工作完美

另外,如果我尝试.VAL(),而不是.attr( '值')萤火显示错误提前家伙

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

感谢。

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

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

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

现在在功能上,我试图通过其选项具有相同的值,这个列表项有“选择2” &检查的选项进行迭代。 “检查”是列表项的“值” &

$(this).attr('value') 

是“选择2选项”值。 如果再匹配

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

删除“选择2选项” &追加到“选择1” 其中作为

​​

删除列表项,使无序列表总是反映“选择2 “元素。

我想这个上下文将足够理解我正在尝试做什么。我是新来的jquery &一般我发贴的问题,我只是找到答案,这是我的第一个问题。我非常感谢这种快速反应。

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

+0

我无法在OSX上的Firefox 12中复制此内容。 – Alnitak

+2

['.attr()'和'.val()'可以很好地处理大值](http://jsfiddle.net/mdWfJ/1/)。 –

回答

0

这是因为,当您将它分配给<li>元素的'value'属性时,此'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'属性。

希望这会有所帮助。

+0

谢谢TON !!我知道它必须是整数/数值,但我无法让它工作。这实际上解决了2件事,赋予了更有意义的自定义属性。 – GauravY

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 

您尝试删除两次的东西,这也让页面炸毁,所以我评论说出来。

+0

我认为我想要做的事情有一点必要。我编辑了我的问题。但是,我已经感谢你如此快速的回应先生。 – GauravY

+0

不,它不明确。你甚至没有'select2' HTML元素。所以它仍然很不清楚你想要什么。尝试将你的代码放入jsfiddle中,以便更好地了解所有存在的HTML元素。 – ronalchn

+0

这里的情况。如果你使用它。你可以看到2,3选项正在工作,但不适用于具有更大数值的蝙蝠侠。 您可以双击select1中的选项将它们移动到选择2,然后单击应用以反映对选定列表的更改。点击列表项的右上角(图像是空的,但你可以悬停看到里面的锚) http://jsfiddle.net/ygaurav/vUgym/ – GauravY