2011-08-11 10 views
2

私はウェブプログラミングには新しく、以前のテキストフィールドをクリックすることに基づいてテキストフィールドを特定のフォームに追加しようとしています。 htmlページは1つのフィールドから始まり、前のフィールドをクリックすることに基づいてテキストフィールドとともに拡大します。これは、クライアント側のJavaScript経由です。フォームの要素を作成するにはヘルプJavaScriptとJQueryを使用してクリックしてください

しかし、コードが機能していないようで、どこにもいないようです。表示されるのは、HTMLによって規制される1つのテキストフィールドであり、clickイベントは何も出力していません。あなたは今のスタイリングを無視することができます。

<!DOCTYPE html> 
<html> 
<title>This is just a test</title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"> 
$(document).ready(function(){ 
var inival = 0; 
function addTextBox() 
{ 
    var newArea = add_New_Element(); 
    var htcontents = "<input type='text' name='textbx[]'/>"; 
    document.getElementById(newArea).innerHTML = htcontents; // You can any other elements in place of 'htcontents' 
} 
function add_New_Element() 
{ 
inival=inival+1; // Increment element number by 1 
var ni = document.getElementById('area'); 
var newdiv = document.createElement('div'); // Create dynamic element 
var divIdName = 'my'+inival+'Div'; 
newdiv.setAttribute('id',divIdName); 
ni.appendChild(newdiv); 
return divIdName; 
} 
    $("input").click(function(){ 
    addTextBox(); 
    }); 
}); 
</script> 
<body> 
<div> 
<form id="mainform" action="execute.php" method="post"> 
<input type="text" name="textbx[]"/> 
</form> 
</div> 
</body> 
</html> 

答えて

3

あなたはこれを使用して、ソリューション全体置き換えることができます:私は、イベントハンドラをクローニングわざわざ.delegateを使用していないことを好むだろう

$("input").click(function() { 
    $(this).after($(this).clone(true)); 
    $(this).after("<br />"); 
}); 

Demo.

を:

$("#myForm").delegate("input", "click", function() { 
    $(this).after($(this).clone()); 
    $(this).after("<br />"); 
}); 

Demo.

+0

は非常にクールな何よりも、それよりシンプルこのdemoをチェックし、ハードな方法でそれを行うと思うそれを

を取得しようとしたときには、エラーが発生します、と感謝のためにデモも! – jab

+0

@ user859434 - あなたは歓迎です:)ちょっとしたことですが、私が投稿したソリューションをあなたのコードに置き換えるのではなく、コードがどこで/なぜ壊れているのかを実際に理解する方が良いでしょう。あなたはそれから大いに恩恵を受けるでしょう。 – karim79

+0

ああ、私はgoogle-hosted jqueryライブラリを参照する際にエラーを出しました...なぜ、jqueryイベントはうまくいかないのですか? – jab

0

この行:あなたは '地域' のIDを持つすべての要素を持っていないため、

var ni = document.getElementById('area'); 

は、nullniを設定します。これはあなたが言うしようとすると、後から機能的に意味:

ni.appendChild(newdiv); 

それは動作しません。

ちなみに、新しい入力を保持するために特別なdiv要素を作成するのはなぜですか?入力要素を直接追加するだけではどうですか?

0

ファースト・ヨーUは、ID areaで任意のタグを持っていないので、私はあなたが

関連する問題