0

要素の innerHTML を置き換えるという非常に単純な機能があります。私はこれを何時間もデバッグしようとしてきましたが、単にできず、腹立たしいです。

ボタン プレスから呼び出された場合、JavaScript (次のように) は正常に機能しますが、別の関数から呼び出された場合は機能しません。これがなぜなのか、私は完全に迷っており、それは私のアプリのかなり重要な部分です

  // This loaded function in my actual code is a document listener
  // checking for when Cordova is loaded which then calls the loaded function
  loaded();

  function loaded() {
alert("loaded");
changeText();
  }

  function changeText() {
   alert("started");
   document.getElementById('boldStuff').innerHTML = 'Fred Flinstone';
  }

ボタンを押すと置換する HTML

 <div id="main">
  <input type='button' onclick='changeText()' value='Change Text'/>
  <p>Change this text >>  <b id='boldStuff'> THIS TEXT</b> </p> 
 </div>

JSFiddleにも全文が掲載されています

4

3 に答える 3

1

changeText()ここでの問題は、関数を呼び出しているときに、操作しようとしている要素がまだ存在していないことです。

ページの読み込みが完了した後(およびすべての要素が配置された後)にのみコードが実行されるようにするには、onload次のようにbody要素でハンドラーを使用できます。

<body onload="loaded();">

さらに、プロパティを使用して値を操作することは非常に悪い習慣であることを知っておく必要がありinnerHTMLます。正しい方法は、DOM操作を使用することです。これが役立つ場合があります。

于 2013-01-10T11:13:23.977 に答える
1

boldStuff要素( )がロードされる前にスクリプトがロードされます。

テストリンクjs-1-別のファイルに入れます

テストリンク-2-jsを閉じる前に、最後にを置きます<body>

于 2013-01-10T11:14:24.780 に答える
1

関数oninnerHTMLを呼び出すことにより、既に が変更されています。これを空のファイルに入れて同じようにブラウザで開いて試してみてください。関数にコメントしました。これで、onclick で変更されます。loaded();onLoad.htmlloaded();

<div id="main">
  <input type='button' onclick='changeText();' value='Change Text'/>
  <p>Change this text >>  <b id='boldStuff'> THIS TEXT</b> </p> 
 </div>

<script>

  //loaded();

  function loaded() {
    alert("loaded");
    changeText();
  }

  function changeText() {
   alert("started");
   document.getElementById('boldStuff').innerHTML = 'Fred Flinstone';
  }

</script>
于 2013-01-10T11:19:08.100 に答える