2011-04-14 94 views
0

当我单击页面上的元素时,我只想设置隐藏字段的值。使用JQuery定位隐藏字段

HTML:

<div id="toggleParent"> 
    <input type="hidden" name="toggleValue" id="toggleValue" value="closed" /> 
    <h2>Click Me</h2> 
</div> 

的jQuery:

jQuery(document).ready(function() { 
    var toggle; 
    jQuery('div#toggleParent h2').click(function() { 
    if (toggle == '' || toggle == 'open') { 
     toggle = 'closed'; 
    } else { 
     toggle = 'open'; 
    } 
    jQuery('div#toggleParent input#toggleValue').val(toggle); 
    }); 
}); 

显然,它不工作。 (为什么我会在这里,否则?)点击事件工作正常,因为我可以在Firebug中穿过它。但是当它设置值时,代码失败。更重要的是,尝试alert(jQuery('div#toggleParent input#toggleValue').length)返回0.事实上,alert(jQuery('div#toggleParent h2').length)返回0,即使刚刚发射该确切元素上的点击事件!

我错过了什么?

+0

奇妙而又奇妙。只是试图在jsFiddle中的代码,你不知道吗?它完美的作品。显然,我没有看到其他地方存在的问题。无论如何感谢您看看它! – 2011-04-14 02:11:00

回答

4

此:

document.ready(function() {...}); 

应该是:

jQuery(document).ready(function() {...}); 

甚至:

jQuery(function() {...}); 

或者......

jQuery(function ($) { /* Use $ in here instead of jQuery */ }); 

请记住,使用ID时,由于ID是唯一的,因此不需要任何其他选择器。这就足够了:

jQuery('#toggleValue').val(toggle); 
+0

@ Box9甚至:'jQuery(function($){...});'(因为'$'比'jQuery'要冷) – 2011-04-14 00:57:40

+0

事实上,我相信最好使用ID选择器来提高性能。 – jeremysawesome 2011-04-14 00:58:54

+0

@Šime好点:) – 2011-04-14 01:05:38

0

您的“切换”值是未定义的,您只能在document.ready中定义它,但不要为其指定任何值。要分配,使用

var toggle = jQuery('div#toggleParent input#toggleValue').val(); 
+0

这不是问题。 – 2011-04-14 00:55:18

+0

未定义不是问题;它只是移动到if语句的else块中。我已经逐步完成了代码,直到val赋值为止,在这一点上切换DOES才有值。此外,这并没有解决长度警报持续返回0的问题。 – 2011-04-14 01:37:11

0

我建议这样的代码:

jQuery(function($) { 

    var toggleParent = $('#toggleParent')[0], 
     toggleValue = $('#toggleValue')[0]; 

    $(toggleParent).find('h2').click(function() { 
     toggleValue.value = toggleValue.value === 'closed' ? 'open' : 'closed'; 
    }); 

}); 
+0

这也失败了。 '$('#toggleParent').length'返回0,所以当我尝试[0]进入这个时,我得到一个错误。 – 2011-04-14 01:40:27

+0

@Roger如果'$('#toggleParent')。length'返回0,那么在页面上没有元素的id为“toggleParent”。你有没有尝试过不同的浏览器? – 2011-04-14 01:55:15

0

试试这个代码:

$(document).ready(function() { 
      var toggle; 
      $('div#toggleParent h2').click(function() { 
       if (toggle == '' || toggle == 'open') { 
        toggle = 'closed'; 
       } else { 
        toggle = 'open'; 
       } 
       $('div#toggleParent input#toggleValue').val(toggle); 
       alert($("input#toggleValue").val()); // check what the new value is 
      }); 
     }); 
+0

为了提高答案的质量,请包括您的帖子如何/为什么会解决问题。 – 2012-10-05 20:56:33