2013-03-28 48 views
0

我遇到了此代碼的問題,我無法弄清楚它不起作用。 本質上,當單擊一個複選框時,應顯示相同li中的文本字段。單擊複選框時顯示文本輸入 - jquery

我不想要一個「隱藏/顯示」,因爲這將填充與附加字段的數組,因此我正在尋找使它填充div的新輸入,如果複選框被選中。

任何想法遇到問題?

這裏是我的html:

<ul> 
    <li class="practice"><label><input type="checkbox" value="Practice 1" class="input_control" name="practice_areas[id][name]" /> Practice 1</label> <div class="showOrder"></div></li> 
    <li class="practice"><label><input type="checkbox" value="Practice 2" class="input_control" name="practice_areas[id][name]" /> Practice 2</label> <div class="showOrder"></div></li> 
    <li class="practice"><label><input type="checkbox" value="Practice 3" class="input_control" name="practice_areas[id][name]" /> Practice 3</label> <div class="showOrder"></div></li> 
    <li class="practice"><label><input type="checkbox" value="Practice 4" class="input_control" name="practice_areas[id][name]" /> Practice 4</label> <div class="showOrder"></div></li> 
    <li class="practice"><label><input type="checkbox" value="Practice 5" class="input_control" name="practice_areas[id][name]" /> Practice 5</label> <div class="showOrder"></div></li>     
</ul> 

這裏是我的javascript:

<script> 
jQuery('li.practice').each(function() { 
    jQuery(".input_control", this).click(function() { 
     jQuery('.showOrder', this).html('<label>Order: <input type="text" size="2" name="practice_area[id][order]" value="" /></label>'); 
    }); 
}); 

</script> 
+1

「填充附加字段數組」你這是什麼意思?什麼陣列? –

+0

嗨裏克,如果你注意到我有文本字段設置爲一個數組。如果項目是空白的,它仍然會將項目添加到數組中。希望這是有道理的。 – Troy

回答

2

您正在誤用$(selector, context).showOrder元素不在單擊元素的上下文中。

$('li.practice .input_control').change(function(){ 
    var $target = $(this).closest('li').find('.showOrder'); 
    if (this.checked) { 
     $target.html('<label>Order: <input type="text" size="2" name="practice_area[id][order]" value="" /></label>'); 
    } else { 
     $target.empty(); 
    } 
}); 

http://jsfiddle.net/Qh6Fq/1/

+0

謝謝undefined :)這個工程,因爲它刪除它以及複選框被取消。 – Troy

2

你是用你.input_control作爲上下文正確定位你的.showOrder,我改變了你的代碼中使用您的li.practice的背景下,所以如下:

jQuery('li.practice').each(function() { 
    var li = this; 
    jQuery(".input_control", this).click(function() { 
     jQuery('.showOrder', li).html('<label>Order: <input type="text" size="2" name="practice_area[id][order]" value="" /></label>'); 
    }); 
}); 
+0

謝謝尼爾森,這確實有用,但我還沒有定義它也被刪除了。 – Troy

相關問題