2013-02-01 54 views
43

私はパラメータを渡すjavascript関数を持っています。このパラメータは、Webページ内の要素(非表示フィールド)のIDを表します。私はこの要素の値を変更したい。Javascript Idで要素を取得し、値を設定します

このようにすると、オブジェクトがnullなので値を設定できないというエラーが発生します。しかし、私はオブジェクトがnullではないことを知っています。なぜなら、ブラウザで生成されたhtmlコードでそのオブジェクトが表示されているからです。 はとにかく、私は両方のパラメータが同じで、警告メッセージが現れた場合

function myFunc(variable){ 
    var x = variable; 
    var y = 'This-is-the-real-id' 
    alert(x + ', ' + y) 
    var s= document.getElementById(x); 
    s.value = 'New value' 
} 

をデバッグするために、次のコードを試してみましたが、私はまだエラーを取得します。私はこの問題を解決することができ、私は値を設定していたため

EDIT

要素が隠しフィールドでくださいとしてidは、動的DETでどのように

var s= document.getElementById('This-is-the-real-id'); 
    s.value = 'New value' 

を行うときにはすべてが正常に動作しますページが読み込まれます。私は.ready関数$(文書)でこれを追加しようとしたが、その後

function setText(id,newvalue) { 
    var s= document.getElementById(id); 
    s.innerHTML = newvalue; 

}  
window.onload=function() { 
    setText("This-is-the-real-id","Hello there"); 
} 

はあなたがやりたいだろう

+2

関数をどこから呼び出すかを見てみましょう(あなたが提供したコードから判断すると、名前はありません)。 –

+0

変数は何ですか?あなたは無名関数をどう呼びますか? – mplungjan

+1

申し訳ありませんが、それはtypo – jpo

答えて

43

を試してみてくださいやりたいだろうnull例外エラーが発生します。

<html> 
    <head> 
    <title>index</title> 
    <script type="text/javascript"> 
     function myFunc(variable){ 
      var s = document.getElementById(variable); 
      s.value = "new value"; 
     } 
     myFunc("id1"); 
    </script> 
    </head> 
    <body> 
     <textarea id="id1"></textarea> 
    </body> 
</html> 
//Error message: Cannot set property 'value' of null 

だから、あなたのテキストエリアがページ内に存在しないことを確認した後、myFuncというを呼び出すには、window.onloadや$(ドキュメント).ready関数を使用することができます。 うれしいです。

+0

私は、隠しフィールドを作成し、非表示フィールドの値を設定する関数を実行するボタンを作成します。ただし、idは動的に設定されます。 $(document).ready関数でこの関数を追加しようとしましたが、同じ問題が発生します。 – jpo

+0

@jpo idが動的に設定されている場合は、idが設定された後にmyFuncが呼び出されるようにする必要があります。 idを設定する関数でmyFuncを呼び出そうとすることができます。 –

+0

私のコードは次のようになります@Html.HiddenFor(m => m.myfield、new {id = "myId"})。 – jpo

11

<div id="This-is-the-real-id"></div> 

を考えるとうまくいきませんでした


与えられた

<input id="This-is-the-real-id" type="text" value=""> 

その後、

function setValue(id,newvalue) { 
    var s= document.getElementById(id); 
    s.value = newvalue; 

}  
window.onload=function() { 
    setValue("This-is-the-real-id","Hello there"); 
} 

あなたはそれが動作する以下のようなテキストエリアがページにレンダリングされる前にmyFunc(変数)が実行された場合

+0

まさに私が思った。しかし、私のIDと動的に設定します。しかし、私は同じ考えを使用しました。しかし、私が関数が呼び出されると、ドキュメントは指定されたidを持つ要素を見つけることができません – jpo

+0

htmlとイベントハンドラ(onclickなど)を参照する必要があります – mplungjan

1

が...

<html> 
<head> 
<script> 
function displayResult(element) 
{ 
document.getElementById(element).value = 'hi'; 
} 
</script> 
</head> 
<body> 

<textarea id="myTextarea" cols="20"> 
BYE 
</textarea> 
<br> 

<button type="button" onclick="displayResult('myTextarea')">Change</button> 

</body> 
</html> 
+1

インラインイベントハンドラは悪い習慣です。 – jbabey

4
<html> 
<head> 
<script> 
function updateTextarea(element) 
{ 
document.getElementById(element).innerText = document.getElementById("ment").value; 
} 
</script> 
</head> 
<body> 

<input type="text" value="Enter your text here." id = "ment" style = " border: 1px solid grey; margin-bottom: 4px;" 

onKeyUp="updateTextarea('myDiv')" /> 

<br> 

<textarea id="myDiv" ></textarea> 

</body> 
</html> 
0

私は問題があなたのJavaScript関数を呼び出す方法だと思う。あなたのコードはそうです:

<input type="button" onclick="javascript: myFunc(myID)" value="button"/> 

myIDは引用符で囲む必要があります。

関連する問題