2015-12-30 122 views
2

我想提交一個表單與jQuery/AJAX但我的功能從未被調用,當我點擊提交按鈕。提交表單與jquery/AJAX不起作用點擊提交按鈕

我的網站看起來像這樣: CarMenu.php

<html lang="en"> 
<html> 
<head> 
    <meta charset="ISO-8859-1"> 
    <title>ArsenalAutoBrokers - Backend - add car</title> 
    <link rel="stylesheet" href="../js/jquery-ui-1.11.4/jquery-ui.min.css"  type="text/css"/> 
    <link rel="stylesheet" href="../js/jquery-ui-1.11.4/jquery-ui.css" type="text/css"/> 
    <link rel="stylesheet" href="../js/jquery-ui-1.11.4/jquery-ui.theme.css" type="text/css"/> 
    <link rel="stylesheet" href="../js/jquery-ui-1.11.4/jquery-ui.structure.css" type="text/css"/> 
    <link rel="stylesheet" href="../css/carForm.css" type="text/css"/> 
    <script charset="UTF8" src="../js/jquery/jquery-1.11.3.js"></script> 
    <script charset="UTF8" src="../js/jquery-ui- 1.11.4/external/jquery/jquery.js"></script> 
    <script charset="UTF8" src="../js/jquery-ui-1.11.4/jquery-ui.js"></script> 
    <script charset="UTF8" src="../js/app/carForm.js"></script> 
    <script charset="UTF8" src="../js/app/addCar.js"></script> 
</head> 
<body> 
    <div id="container"> 
     <div id="leftMenuContainer"> 
     <ul id="menu"> 
      <li id="addCarItem">Add car</li> 
      <li id="saveCarItem">Edit cars</li> 
     </ul> 
     </div> 
     <div id="rightMainContent"> 

     </div> 
     <div class="clear"></div> 
    </div> 
    </body> 
</html> 

在該頁面中,我使用jQuery的菜單,我將數據裝入用id的DIV「rightMainContent」。

的JavaScript代碼來做到這一點的樣子:carForm.js

$(document).ready(function() { 
    $("#menu").menu({ 
    select: function(event, ui) { 
     if (ui.item.attr('id') === 'addCarItem') { 
      $("#rightMainContent").load(
      '/CarDealer/CarForm/CreateCar/AddCar.php');  
     } 
    } 
}); 
}); 

如果你點擊「addCar」網站的菜單項部分將從此PHP網站加載:

<script type="text/javascript"> 

$('input[type=submit]').button(); 
//$('#activeCheck').button(); 
$("#activeCheck").attr('checked','checked'); 
$('#saveButton').hide(); 
$('#tabs').tabs(); 
$('#accordion').accordion({heightStyle: "content"}); 

$('#tabs').tabs({ 
    activate: function (event, ui) { 
     var act = $("#tabs").tabs("option", "active"); 
     if (act == 0 || act == 1) { 
      $('#saveButton').hide(); 
     } else { 
      $('#saveButton').show(); 
     } 
    } 
}); 

$('#fileToUpload').on('change', function(){ 
    var fileSelect = document.getElementById('fileToUpload'); 
    var files = fileSelect.files; 

    if (files.length > 10) { 
    $('.info').html('The file upload is limited to <font color="red"><b>10 pictures per car</b></font>.<br>Only the 1st ten pictures will be stored.'); 
    $('.info').show(); 
    } else { 
     $('.info').html(''); 
    $('.info').hide(); 
    } 

}); 

</script> 

<form id="carSaveForm" 
    action="/CarDealer/CarForm/CreateCar/CarCreation.php" method="POST" 
    enctype="multipart/form-data"> 
    <div id="tabs"> 
     <ul> 
      <li><a href="#tabsGen">General Car Information</a></li> 
      <li><a href="#tabsDescr">Car Descriptions</a></li> 
      <li><a href="#tabsPics">Picture Upload</a></li> 
     </ul> 
     <div id="tabsGen"> 
    <?php include($_SERVER['DOCUMENT_ROOT']."/CarDealer/CarForm/CreateCar/carGeneralData.php"); ?> 
    </div> 
     <div id="tabsDescr"> 
    <?php include($_SERVER['DOCUMENT_ROOT']."/CarDealer/CarForm/CreateCar/carDescriptions.php"); ?> 
    </div> 
     <div id="tabsPics"> 
    <?php include($_SERVER['DOCUMENT_ROOT']."/CarDealer/CarForm/CreateCar/PictureUpload.php"); ?> 

    </div> 
    </div> 
    <br> <input id="saveButton" type="submit" name="submit" value="save" /> 
</form>  

這個網站只包含表單元素,如輸入按鈕,文件撿取器等。

那麼,迄今爲止好。一切都正常顯示,但如果我點擊提交按鈕,此功能是沒有得到所謂:addCar.js

$('#carSaveForm').on('submit', function(event){ 
     event.preventDefault(); 

     var formData = new FormData(); 
     // get the form data 
     // there are many ways to get this data using jQuery (you can use the class or id also) 
     formData.append('carBrand'    , $('input[name=carBrand]').val()); 
     formData.append('carModelYear'   , $('input[name="carModelYear"]').val()); 
     formData.append('carModel'    , $('input[name=carModel]').val()); 
     formData.append('carTrim'    , $('input[name="carTrim"]').val()); 
     formData.append('carDriveTrain'   , $('input[name="carDriveTrain"]').val()); 
     formData.append('carCondition'   , $('input[name="carCondition"]').val()); 
     formData.append('carType'    , $('input[name="carType"]').val()); 
     formData.append('carFuelType'   , $('input[name="carFuelType"]').val()); 
     formData.append('carTransmission'  , $('input[name="carTransmission"]').val()); 
     formData.append('carEngine'    , $('input[name="carEngine"]').val()); 
     formData.append('carCylinder'   , $('input[name="carCylinder"]').val()); 
     formData.append('carMileage'    , $('input[name="carMileage"]').val()); 
     formData.append('carExteriorColor'  , $('input[name="carExteriorColor"]').val()); 
     formData.append('carInteriorColor'  , $('input[name="carInteriorColor"]').val()); 
     formData.append('carLocation'   , $('input[name="carLocation"]').val()); 
     formData.append('carVin'     , $('input[name="carVin"]').val()); 
     formData.append('carStock'    , $('input[name="carStock"]').val()); 
     formData.append('carPrice'    , $('input[name="carPrice"]').val()); 
     formData.append('carPriceDetails'  , $('input[name="carPriceDetails"]').val()); 
     formData.append('carTax'     , $('input[name="carTax"]').val()); 
     formData.append('carTaxDetails'   , $('input[name="carTaxDetails"]').val()); 
     formData.append('carCurrency'   , $('input[name="carCurrency"]').val()); 
     formData.append('carOnline'    , $('input[name="carOnline"]').val()); 
     formData.append('carDescr'    , $('input[name="carDescr"]').val()); 
     formData.append('carBodyDescr'   , $('input[name="carBodyDescr"]').val()); 
     formData.append('carDriveTrainDescr'  , $('input[name="carDriveTrainDescr"]').val()); 
     formData.append('carExteriorDescr'  , $('input[name="carExteriorDescr"]').val()); 
     formData.append('carElectronicsDescr' , $('input[name="carElectronicsDescr"]').val()); 
     formData.append('carSaftyFeaturesDescr' , $('input[name="carSaftyFeaturesDescr"]').val()); 
     formData.append('carSpecialFeaturesDescr', $('input[name="carSpecialFeaturesDescr"]').val()); 

     var fileSelect = document.getElementById('fileToUpload'); 
     var files = fileSelect.files; 
     // Loop through each of the selected files. 
     for (var i = 0; i < files.length; i++) { 
      var file = files[i]; 

      // Add the file to the request. 
      formData.append('files[]', file, file.name); 
     } 

     // process the form 
     $.ajax({ 
      type  : 'POST', // define the type of HTTP verb we want to use (POST for our form) 
      url   : '/CarDealer/CarForm/createCar/carCreation.php', // the url where we want to POST 
      data  : formData, // our data object 
      contentType: false, 
      processData: false, 
      success: function (data) { 
       $('.success').fadeIn(200).show(); 
       $('.error').fadeOut(200).hide(); 
      }, 
      error: function (data) { 
       $('.success').fadeIn(200).hide(); 
       $('.error').fadeOut(200).show(); 
      } 

     }); 
     return false; 
    }); 

我不知道爲什麼這個功能是從來沒有得到所謂的,我已經嘗試了一切,我用Google搜索很多,但我沒有得到它。我整天都在尋找錯誤,但我看不到它。

請幫幫我。

您的幫助是優選的。

在此先感謝。

+0

使用表單序列化這些值 – devpro

+0

感謝您的提示。我已經嘗試過了,但它不能處理文件。 – F4k3d

回答

5

jQuery是僅在運行時才瞭解頁面中的元素,因此添加到DOM的新元素無法通過jQuery識別。爲了防止使用event delegation,將新添加的項目中的事件冒泡直至jQuery在頁面加載時運行時出現的DOM點。很多人使用document作爲捕捉冒泡事件的地方,但是沒有必要去追趕DOM樹。理想的情況下you should delegate to the nearest parent that exists at the time of page load.

例如,這個按鈕已經通過AJAX添加到DOM:

<input id="saveButton" type="submit" name="submit" value="save" /> 

爲了妥善處理這一(如果是添加到頁面有此標識的唯一形式)是委派點擊或提交事件:

$(document).on('click', '#saveButton', function(event) {... 

此外,如果你繼續添加形式告訴你在這裏,你將有重複的ID在你的頁面和id's must be unique。不能使它們獨一無二會導致一些問題。

請確保在瀏覽器的控制檯as outlined here中查看AJAX請求/響應,以查找並更正您可能遇到的錯誤。

+0

謝謝Jay Blanchard。這對我來說是新的。現在我學到了一些新東西。 – F4k3d

2

​​變化到$('#carSaveForm').on('click','#saveButton', function(event)

-2

剪切(CTRL + X)這條線從CarMenu.php

<script charset="UTF8" src="../js/app/addCar.js"></script> 

和粘貼(CTRL + V)的腳本中AddCar.php