0

私のJavaScriptコードはFirefoxで正常に動作しますが、Chromeでは動作しません。Firefoxでは、オプションが選択されるとすぐに正しい数のフォーム(JavaScript関数内のコードによって作成された)が表示されますが、Chromeでは何も起こりません。理由はわかりません。私は主にLinuxコンピュータを使用しているのでしばらくチェックインしていませんが、IE9も同様に機能すると思います。

あなたが私が解決策を見つけるのを手伝ってくれるなら、私はそれをいただければ幸いです。ちなみに、同じようなタイトルの質問を読んだのですが、答えられなかったようです。

<script type="text/javascript">
  function showForms(numForms)
  {
      // build  the form
      var form = "";
      for(i = 1; i <= numForms; i++)
      {    
           // define one section of the form (give fields unique names).
           var formPart = '<fieldset><legend>Add User</legend><label>Full Name:</label><input name="fullname' + i + '"  type="text" required="required"" /><label>Email:</label><input name="email' + i + '" type="email" /><label>Phone:</label><input placeholder="1 (123)-123-1234" name="phone' + i + '" type="tel" /><label>Spreadsheet:</label><input name="spreadsheet' + i + '" type="file" /><label>Registration #:</label><textarea name="regnums' + i + '" placeholder="Aircraft registration number(s). Separate each number with a comma."></textarea></fieldset>';
           form = form + formPart;
      }
      // output the form to the page
      var output = document.getElementById("output");
      output.innerHTML = form + '<input name="numForms" value="' + numForms + '" type="hidden" />';
  }
</script>

ちなみに、この関数は次のように呼び出され<option onclick="showForms(#)">#</option>ます。ここで、#は表示されるフォームの数です。もちろん、オプションは内にあり<select>ます。

よろしくお願いします。

編集:これは、HTML、PHP、JavaScriptを含む呼び出しスクリプトです。

<?php
// include the javascript function to generate the form
include ('../private/Includes/Scripts/showforms.js');

// form handling code
if (isset($_POST['submit']))
{
    // make sure the input for the number of users is a number, and less than or
    // equal to 10
    if (is_numeric($_POST['numForms']) && $_POST['numForms'] <= 10)
    {
        $regCount = $_POST['numForms'];
    }

    // initialize array for form data
    $regData = array();
    // fill array with multi-dimentional form data
    for ($i = 1; $i <= $regCount; $i++)
    {
        // get form data and store in temporary variables
        $fullname = trim($_POST['fullname' . $i]);
        $email = trim($_POST['email' . $i]);
        $phone = trim($_POST['phone' . $i]);
        $spreadsheet = $_POST['spreadsheet' . $i];
        $regnums = trim($_POST['regnums' . $i]);
        // put data in array
        $regData[$i] = array(
            'username' => '',
            'fullname' => $fullname,
            'email' => $email,
            'phone' => $phone,
            'spreadsheet' => $spreadsheet,
            'regnums' => $regnums
        );
        // unset temporary variables
        unset($invalid, $username, $fullname, $email, $phone, $spreadsheet, $regnums);
    }
    $errors = registerUsers($regData);
    if ($errors[0] == "Some users were not registered due to missing usernames.")
    {
        $notes[] = "Some users were not registered due to missing usernames.";
        unset($errors[0]);
    }
    if (!isset($errors))
    {
        $success = true;
    }
}
?>
<h2 style="margin-top: -9px;">Register Users</h2>
<p>Use this form to register new users. Usernames and passwords are automatically generated and emailed to their owner's addresses.</p>
<form enctype="multipart/form-data" method="post">

    <fieldset>
        <legend>
            Form Setup &amp; Results
        </legend>
        <label>No. of User(s):</label>
        <select onchange="showForms(0)" name="select">
            <option selected="selected">- Please Select -</option>
            <option onclick="showForms(1)">1</option>
            <option onclick="showForms(2)">2</option>
            <option onclick="showForms(3)">3</option>
            <option onclick="showForms(4)">4</option>
            <option onclick="showForms(5)">5</option>
            <option onclick="showForms(6)">6</option>
            <option onclick="showForms(7)">7</option>
            <option onclick="showForms(8)">8</option>
            <option onclick="showForms(9)">9</option>
            <option onclick="showForms(10)">10</option>
        </select>
    </fieldset>
    <div id="output"></div>
    <input id="submit" name="submit" type="submit" value="Submit" />
</form>
4

3 に答える 3

2

間違った構文-HTML文字列のエスケープされていない"。

... + '"  type="text" required="required"" />

このような間違いからあなたを救うであろういくつかのIDEまたはスマートエディタを使用してください。

ところで、あなたのための1つのトリック:コードテンプレートを非表示にします(表示:なし)。次に、それぞれについて、新しいノードにコピーしてIDを変更し、適切な場所に配置します。W3C標準の一部であるDOM操作を参照してください。

2番目のヒント:IDを生成する代わりに、PHPのfoo[]などの配列に対してサーバー側の言語サポートを使用します。IMOより良いアプローチ。

于 2012-07-04T03:54:03.690 に答える
2

Chromeのスタック上のこのページにそのような要素を追加し、func定義を実行し、引数8で起動して、一連のフォームを取得したため、IDが「output」の要素が複数あると思います。StackはJQueryを使用しているので...

$('body').append('<div id="output"/>');

次に、切り取って貼り付け、コンソールで関数を定義します...

showForms(8);

Stackのページの下部に大量のフォームジャンクが表示されるはずです。もう1つの可能性は、ID'output'の要素がないことです。

常に最初にHTMLを確認してください。いつも。ほんの少しの時間しかかかりません。サイトにJQがある場合は、その関数を呼び出す前にこれを実行してください。

alert($('#output').size());

1でない場合は、それが問題です。

于 2012-07-04T04:34:38.600 に答える
0

同様の問題が発生し、使用前にアレイを定義しなかったことが原因でした。Firefoxは、varステートメントで明示的に定義されていない配列の操作に対してより寛容であるように見えますが、Chromeではそれらを定義する必要があります。

于 2013-06-26T12:40:48.117 に答える