2

入力フォームでonchange()を使用して関数を呼び出そうとしています

Chromeでコンソールを確認すると、次のコードが返されます。

ReferenceError: changingNow is not defined

サファリでは、それは言います

  ReferenceError: Can't find variable changingNow

コードは次のとおりです。

function changingNow() {
 first_name=document.getElementById(first_name);
 last_name=document.getElementById(last_name);
 username=document.getElementById(username);
 category=document.getElementById(category);
 if ((first_name!=="")&&(last_name!=="")&&(username!=="")&&(category!="empty")) {
   form1.process.disabled = false;
 }
 else {
  form1.process.disabled = true;
 }

 document.getElementById('tweet').value = 'I just voted for '+first_name+' '+last_name+'('+username+')'+'in the '+category+' category!';
 }


 First Name<input type="text" name="first_name" id="first_name" class="first_name" maxlength="50" onchange="changingNow"/><br/>

これをグーグルで検索すると、jQueryが原因であることが示されているようですが、ページにjQueryがありません。

ありがとう

編集

Rob Wは正しいです、私はすでにブラケットを試しました、それらはこの問題を分類するのに無意味です。とにかくありがとう!

4

4 に答える 4

4

コードには多くの問題があります。手始めに、さまざまなテキストフィールドの値を取得する行は正しくありません。

first_name=document.getElementById(first_name);

getElementById文字列が必要です。文字列を渡すのではなく、。という名前のまだ定義されていない変数を渡しますfirst_name。文字列にするには、引用符を付けてください。var次に、変数のスコープに影響を与えるキーワードを使用していません。最後に、これら2つのエラーを修正しても、まだ値を取得しておらず、要素を取得しています-getElementByIdを取得しますHTMLElementObject。さらに、このオブジェクトを文字列として処理しようとします。

first_name!==""

現状では、first_nameは文字列ではなく、オブジェクトであるため、空の文字列と等しくなることはありません。すべてをまとめると、代わりに次のことが必要になります。

var first_name=document.getElementById('first_name').value;

これにより、IDが「first_name」のテキストフィールドの値が文字列として提供されます。

さらに、ifステートメントの括弧が多すぎます。

if ((first_name!=="")&&(last_name!=="")&&(username!=="")&&(category!="empty"))

代わりに、これらの括弧は必要ありません。

if (first_name !== "" && last_name !== "" && username !== "" && category!= "empty"){ }

// or my personal preference:

if (
     first_name !== "" &&
     last_name !== "" &&
     username !== "" &&
     category!= "empty"
){ }

最後に、インラインonchangeイベントを削除して、JavaScriptの割り当てに置き換えることをお勧めします。

document.getElementById('first_name').onchange = changingNow;

これは、イベントを適用する1つの方法にすぎません。詳細については、この回答を参照してください

すべてを一緒に入れて:

var changingNow = function() {
    var first_name = document.getElementById('first_name').value;
    var last_name = document.getElementById('last_name').value;
    var username = document.getElementById('username').value;
    var category = document.getElementById('category').value;
    var form1 = document.getElementById('form1');
     if (
         first_name !== "" &&
         last_name !== "" &&
         username !== "" &&
         category!= "please choose a category"
    ){
        // this line of code is not valid in regular JS...
        //form1.process.disabled = false;
        document.getElementById('tweet').value = 'I just voted for '+first_name+' '+last_name+' ('+username+')'+' in the '+category+' category!';
    } else {
        // this line of code is not valid in regular JS...
         //form1.process.disabled = true;
        document.getElementById('tweet').value = 'please complete the fields above!';
    }
}
document.getElementById('first_name').onchange = changingNow;
document.getElementById('last_name').onchange = changingNow;
document.getElementById('username').onchange = changingNow;
document.getElementById('category').onchange = changingNow;
changingNow();

ここで試してみてください:http://jsfiddle.net/yzbWr/

ドキュメンテーション

于 2012-06-27T17:10:13.227 に答える
0

function changingNow()フィールドを挿入した後に定義した可能性があります。<input>フィールドをonchangeで実行せず、onchange(changingNow()vs changingNow)に割り当てるため、最終的にフィールドを割り当てます。undefined

于 2012-06-27T16:54:44.397 に答える
0

これを修正するには、アプリにグローバル名前空間を指定してから、メソッドを明示的に呼び出します。

window.myApp = {};
window.myApp.changingNow = function(){
    // your function code here
};

そして、HTMLで:

<input type="text" ... onchange="window.myApp.changingNow">
于 2012-06-27T17:06:04.113 に答える
0

紳士(そして女性??)私たちの問題は解決されたようです。私の問題は、哀れなこと <script type="text/javascript">に、「テキスト」を省略していたことでした。

それにもかかわらず、解決策があります。()は必須のようですが、Chrisの優れた回答に感謝します。実際、getelementbyidに関する彼のコメントは正しいです。

あなたなど、

于 2012-06-27T19:34:00.563 に答える