2017-07-05 25 views
1

だから、以下のように動作する非常に単純なJS関数が書かれています。Onclick JS関数呼び出し、Safariコンソールでのみ変数を見つけることができません。

次のコードを持っているボタンがあります:それをクリックしたときに

<button type="submit" class="large button" onclick="addCart(76,95,73,96);"> 
    <i class="icon-shopping-cart"></i> Add to Cart 
</button> 

は今、非常に単純な関数があり、その下のページに追加し、次のようになります。

<script type="text/javascript"> 
    function addCart(pid, pattr, pval, pscent = 0) { 
    ... 
    } 
</script> 

これは、Chrome、Firefox、Chrome for Mobile、Safari for Mobileで完璧に機能します。

しかし、このは、MacのSafariでを動作させていないようです。代わりに次のエラーが表示されます。

ReferenceError: Can't find variable: addCart

私は理由を理解できません。 7つのボタンと送信される変数の配列が豊富で、リスナーを追加するのは難しいです。私が現在行っているように、むしろ送信したいと思います。

+0

ボタンをクリックしたときやページが読み込まれたときにエラーが発生しますか? – James

+0

スクリプトタグは本文にあり、Safariを除くすべてのブラウザで最初に動作するか、最後に動作するかは関係ありません。そして、このエラーは、ボタンがクリックされたときにのみ得られます。 –

答えて

0

私はついにこの問題を発見しました。

Safariで関数がエラーを作成していたため、決して定義されていませんでした。私は、次のように関数を変更:

function addCart(pid, pattr, pval, pscent) { 
    pscent = (typeof pscent !== 'undefined') ? pscent : 0; 
... 
} 

お知らせ大きな違いは、私は「pscent」のデフォルト値を宣言し、代わりに私はそれを古い学校の方法を行うための機能を使用しなくなったということではありません。これがSafariの古いバージョンか何かによって引き起こされているかどうかは不明です。

同様のエラーが原因でここにいる場合は、関数内の潜在的なJSエラーを調べて、関数が宣言されないようにしてください。

-1

あなたは

$(document).ready(function() { 
// code here 
}); 

または可能な理由は、あなたの関数はの時に利用できないです

(function() { 
    // your page initialization code here 
    // the DOM will be available here 

})(); 

ここで、プレーンJavaScriptの自己実行機能を使用した文書レディ機能を使用しようとjqueryの使用している場合クリック

ここにサンプルがあります(jqueryを使用)https://jsfiddle.net/baphmoLt/

+1

私はあなたが質問を読むとは思わない。これはjavascriptの単なる関数です。これには、一般に、文書レディコールがロードされておらず、ページ初期化コードもありません。関数は確実に読み込まれている、私は10分間待つことができ、まだ壊れている、スクリプトはページ上の最初のものに移動することができ、変更なし、それは非常に単純な関数です。それは利用可能な問題ではない、それを見つけることができないと私は理由を知らない。 –

+0

*ボタンをクリックするとスクリプト*がロードされます – Li357

+0

@JasonDiehlフィディドをご覧ください。私が何を意味するかを見てください。ありがとう。 – jsmean

0

入力タイプが「送信」であるため、フォームを送信しているようです。あなたは "button"に設定された入力タイプでテストしようとしましたか?

+0

私はそれを試みたが、運がない。 Safariはそれを呼び出そうとしているようだが、見つけられない。 –

関連する問題