2015-12-30 124 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