2013-03-09 42 views
1

對不起。 Javascript(使用jquery)noob在這裏。這是問題。Javascript - 如何重置字段onchange

我有一個數字的選擇欄:

<div class="controls"> 
    <select class="span2" id='select1' onchange="addstuff()"> 
    <option value="1">1</option> 
    <option value="2">2</option> 
    <option value="3">3</option> 
    </select> 
</div> 
<div id="addfields"></div> 

我再通過指定的數目循環,並具有 ID「選擇1」的div標籤中添加一些HTML。

function addstuff() 
{ 
    var num = parseInt($('#select1').val()) 
    if (num != 0) 
    { 
    for (i=0; i<num;i++) 
     { 
     new_field += "<p>" + num + "</p>"; 
     } 
    $('#addfields').html(new_field); 
    } 
} 

所以,如果我選擇3選項,下面的HTML將被添加:

<p> + num + </p> 
<p> + num + </p> 
<p> + num + </p> 

但是,如果我選擇2,2更多的領域將被追加:

<p> + num + </p> 
<p> + num + </p> 
<p> + num + </p> 
<p> + num + </p> 
<p> + num + </p> 

但是,我希望先前的html被擦掉,而我只需要兩個條目。

<p> + num + </p> 
<p> + num + </p> 

如果有人可以請幫助我看看我缺少什麼,這將不勝感激。謝謝!

回答

0

易peasy,感謝並稱太多的解釋和代碼...這應該做你想要什麼:

function addstuff() 
{ 
    var num = parseInt($('#select1').val()); 
    var new_field = ""; 
    if (num != 0) 
    { 
    for (i=0; i<num;i++) 
     { 
     new_field += "<p>" + num + "</p>"; 
     } 
    $('#addfields').html(new_field); 
    } 
} 

主要是它看起來像你沒有重新初始化該new_field變量,因此它只是建立...因爲jquery .html()將覆蓋該addfields中的任何內容,這意味着如果您看到構建它,這是因爲您的new_field變量實際上包含構建。

+0

謝謝你的回答! – user2152283 2013-03-09 20:17:52

0

你永遠不會初始化new_field,你應該這樣做。如果你這樣做,你的問題也將得到解決。

function addstuff() { 
    var new_field = ''; 

順便說一句,因爲你正在使用jQuery那就更簡單了比事件屬性使用事件綁定。取而代之的onchange="addstuff()",做到:

$("#select1").on('change', addstuff); 

你也可以放棄定義addstuff並綁定它作爲一個匿名函數。

+0

非常感謝你的回覆! – user2152283 2013-03-09 20:18:34

+0

@ user2152283不要忘記upvote並接受有幫助的答案 – 2013-03-09 20:24:43

+0

當然。我想在這裏贊成,但我的聲譽還不夠高。對於事件綁定,您的解決方案似乎很乾淨。要閱讀此內容,我很可能會重寫我的代碼。再次感謝你。 – user2152283 2013-03-09 21:51:02