2013-03-02 16 views
9

javascript機能を検索ボタンを押しても機能させようとしていますが、機能が動作していないようです。ご案内ください。 Fiddleonclickがボタンで動作しない

<form action="" method="get" id="searchform" > 
    <input name="q" type="text" id="search" size="32" maxlength="128" class="txt"/> 
    <input type="submit" id="hit" value="Search" onclick="myFunction()" class="btn"/> 
</form> 

相続JS、

function myFunction() { 
alert("I am an alert box!"); 
} 
+0

は 'onclickの=試してみてください "MyFunctionをを(); falseを返す"'が、これは、フォームの作業を停止します。 – Oliver

+0

oliverが言ったように、あなたが 'return false;を実行すると、あなたのJSは実行するべきですが、あなたのフォームが提出しないように投稿が継続しないようにします。 –

+0

とにかくハンドラを実行してはいけませんか? –

答えて

8

onLoadの機能をラップして<head>に変更しました。 thisフィドルを参照してください。

あなたはまた、あなたのコード内の余分な };を持って、

UPDATE

function myFunction() { alert("I am an alert box!"); } }; ^^ 

:関数は$(document).ready内部の場所であれば、その後、

  • 。これは起こります準備完了のコールバック内で使用されるのはのみにすることができます (そして内部のオブジェクトで)。あなたはそれを外部で参照することはできません。

  • の場合、それはグローバルスコープを取得します。つまり、どこからでも呼び出すことができます。

+0

2つの違いを教えてください。 –

+0

上記の関数を$(document)にラップしてみてください。準備ができていない場合は実行されませんが、外に置くと起動します。 – sourcecode

+0

さらに関数にjavascriptの内部関数名(例:close())がある場合は動作しません。今日この問題があり、close()がJSによって上書きされていることに気付いた – juliusmh

3

あなたがどこかのJavaScriptファイルの構文エラーを持っていることを私に最も可能性が高いと思われます。私がこれを言うのは、あなたが示したコードを使って警告が表示されなくなることがないからです。

ブラウザのエラーコンソール(IEとChromeのF12)を確認してエラーがあるかどうかを確認します。これらのエラーが表示されると、機能が定義されなくなります。

+0

ありがとうございます。 myFunctionが定義されていないと言うエラーがあります。 –

3

私はあなたのフィドルを見ましたが、余分な閉じた金具があります。これはうまくいくはずです。

function myFunction() { 
    alert("I am an alert box!"); 
    return false; 
}; 

あなたのフィドルはこのように見えた:

function myFunction() { 
    alert("I am an alert box!"); 
    } 
}; 

EDIT 1: ユーザーがフォームを送信したくなかったので、私はreturn falseを追加しました。

EDIT 2:

誰もJSフィドルの問題を説明したいと考えていないので、私は刺しにそれを取るでしょう。

オリジナルのJS Fiddleでは、サイドバーメニューの2番目のドロップダウンで "onLoad"が使用されています。

この設定が機能しない理由は、JS Fiddleがonload関数でjavascriptコードを実行するためです。これは、myFunctionが有効範囲外であることを意味します。

このため、ドロップダウンメニューには「ラップインなし」と「ラップインなし」のいずれかのオプションを使用する必要があります。これら2つのオプションを代わりに使用すると、関数myFunctionはグローバルスコープになります。

私は物事を明確にすることを望む。

編集3

あなたはonloadイベントを使用したい場合はなかったです。代わりにクリックイベントハンドラを追加し、送信ボタンマークアップのonclick属性を削除することができます。

一般に、javascriptを使用してイベントハンドラを設定する方がよいでしょう。

document.getElementById('hit').addEventListener('click', function() { 
    alert("I am an alert box!"); 
}); 

あなたはjQueryのを使用したい場合は、あなたがこれを行うことができます:

$('#hit').click(function() { 
    alert("I am an alert box!"); 
}); 
6

は私のために、次の作品:

 <form action="" method="get" id="searchform" > 
      <input name="q" type="text" id="search" size="32" maxlength="128" class="txt" > 
      <input type="submit" id="hit" value="Search" onclick="myFunction()" class="btn"> 
     </form> 
     <script> 
      function myFunction() { 
       alert("I am an alert box!"); 
      } 
     </script> 

が、私はあなたが最後に};を持っていることに気づきましたあなたの質問の - それは多分構文エラーの原因ですか?

UPDATE:

問題は、あなたのフィドラーのセットアップと(};以外)でした。チェックthis out!

+1

あなたの更新されたフィドルの例が私のために働いた。たぶん、あなたは何が変わったのか、なぜそれがうまくいったのか説明できます。私はそれを理解しましたが、最初は不明でした。 – Gohn67

+0

@ Gohn67あなたのファイトラーの左メニューをチェックアウトしてください。設定の差分を確認するのは簡単です。 – alfasin

+0

ええ、私は違いが何であるか知っています。私はすでにあなたの答えをアップアップしました。私はちょうどあなたの答えで将来の訪問者とファハドUddin、その違いを知っていることを説明することを示唆していた。ありがとう。 – Gohn67

0

try-catchブロックにあなたの関数を入れて...動作するはず

function myFunction() { 
    try {  
     alert("I am an alert box!"); 
     //enter code here 
     return false; 
    } 
    catch (err) { 
     txt = "There was an error on this page.\n\n"; 
     txt += "Error description: " + err.message + "\n\n"; 
     txt += "Click OK to continue.\n\n"; 
     alert(txt); 
    } 
}