2011-04-26 98 views
3

确定这里的变量是我的代码:jQuery的:作为ID选择不工作

$tabularID = 0; 
$('a.swfselector').live('mouseover', function(event) { 
      $tabularID= $(this).parent().attr('id'); 
      $(this).parent().children().not(this).find('.tab').each(function() { 
         $(this).fadeTo(100, 0.4) 
      }) 
      $(this).find('.tab').each(function() { 
         $(this).fadeTo(100,1) 
      }) 

    }); 
$('#' + $tabularID).live('mouseleave', function(event) { 
      alert($tabularID); 
      $(this).children().find('.tab').each(function() { 
         $(this).fadeTo(100,1) 
      }) 

    }); 

Jquery的不喜欢这个选择:

$('#' + $tabularID) 

虽然如果我将其更改为:

$('#27') 

它警告我的变量$ tabularID就好了,所以我知道它不是错误的变量($ tabularID的输出是27)。我需要一个变量,因为父ID会根据它们的鼠标悬停而发生变化。

任何人都可以看到我不能?可能真的很明显。

+0

不知道他们是否是你的问题的根源,但你不能用纯数字作为标识。用像a27'这样的字母作为前缀, – 2011-04-26 08:28:16

+0

欢呼声,尽管这不能解决问题。这是什么原因? – 2011-04-26 08:30:06

+1

规范;)http://www.w3.org/TR/html401/types.html#type-name虽然我认为在HTML5中是允许的。 – 2011-04-26 08:30:51

回答

7

你的ID必须以字母AZ或AZ开头。

此代码$('#'+ $ tabularID)仅在第一次运行时受到影响。这意味着你的$ tabularID = 0

当你的鼠标在它只更新$ tabularID值,但不会更新绑定到这个对象$的事件(“#” + $ tabularID)

我以为你可以改变你的代码是这样的:

$tabularID = 0; 
$('a.swfselector').live('mouseover', function(event) { 
      $tabularID= $(this).parent().attr('id'); 
      $(this).parent().children().not(this).find('.tab').each(function() { 
         $(this).fadeTo(100, 0.4) 
      }) 
      $(this).find('.tab').each(function() { 
         $(this).fadeTo(100,1) 
      }) 

      $('#' + $tabularID).live('mouseleave', function(event) { 
       alert($tabularID); 
       $(this).children().find('.tab').each(function() { 
         $(this).fadeTo(100,1) 
       }) 

      }); 

    }); 
+0

你看过评论吗? OP已经尝试过,并没有奏效。如果ID不在变量中,它也可以工作,所以这不成问题。 – 2011-04-26 08:43:15

+0

更新我的公交 – YNhat 2011-04-26 08:47:12

+0

我认为就是这样。问题是,你会重新将事件处理程序重新绑定到同一个元素。你也必须删除它们。 – 2011-04-26 08:52:00

2

我经常在选择器中使用变量。所有这些对我来说都很好。请避免使用像'123'这样的ID。 ID命名规则:

  • 必须以字母开头AZ或az
  • 可以跟随:字母(A-ZA-Z),数字(0-9),连字符( “ - ”),下划线( “_”),冒号( “:”),和句( “”)
  • 值是区分大小写的
+0

我已更改ID以符合此格式,但它仍然无效:(。 – 2011-04-26 08:36:07

+0

请将您的代码放在http://jsfiddle.net/上,例如,不仅可以看到JS代码,也可以看到HTML代码。 – CoolEsh 2011-04-26 08:38:07

+0

由于OP已经在他的问题的评论中指出,他试过这个,它没有工作... – 2011-04-26 08:43:50

0

我也遇到了这个问题与jQuery,但发现,常规的JavaScript DOM可以处理的ID以数字开头,如果这就是问题所在。在这种情况下,这可能会起到帮助作用,但是可能值得一看的是,如果更改代码段更容易,而不是更改ID的设置方式。

document.getElementById(tabularID) 

请注意,您在开始时不需要'#'。

More info on document.getElementById