2011-04-14 125 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