我收到一个未捕获的TypeError:undefined不是我网站的一个页面上的函数。该功能在所有其他页面上都可以正常运行。它有点冗长的页面代码,因此我只会在必要时发布它,但这是基础知识。
popover按钮:
<button class="btn btn-info" id="help" type="button" data-toggle="popover" data-trigger="focus" data-html="true" data-placement="bottom" title="ActiveMLS Documentation" data-content="<small><p><strong>List Custom Property Listings</strong></p></small>"><i class="fa fa-question-circle"></i></button>
错误
未捕获的TypeError:undefined不是函数shell.js:23
来自shell.js第23行的jquery
/*******************************/
/* POPOVER HELPER
/*******************************/
$(document).ready(function(){
$('#help').popover()
});
我很困惑为什么它只在这个页面上打破?
<!-- blueimp Gallery styles -->
<link rel="stylesheet" href="/static/uploadlib/css/blueimp-gallery.min.css">
<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars -->
<link rel="stylesheet" href="/static/uploadlib/css/jquery.fileupload-ui.css">
<div class="row-fluid">
<div class="col-md-12">
<div class="row-fluid">
<div class="section-header text-center">
<button class="btn btn-info" id="help" type="button" data-toggle="popover" data-trigger="focus" data-html="true" data-placement="bottom" title="ActiveMLS Documentation" data-content="<small><p><strong>List Custom Property Listings</strong> - The list Custom Property listings page is an overview of all the Custom Property listings listings and information displayed on the website frontend</p><ul><li><strong>Add Custom Property Listings</strong> - Shortcut to the <em>Add Custom Property Listings</em> page.</li><li><strong>Records Per Page</strong> - Display any list 10, 25, 50, or 100 records at a time.</li><li><strong>Search</strong> - Search any list by keyword(s).</li><li><strong>Listing ID</strong> - The Custom Property ID of the Custom Property listing.</li><li><strong>Address</strong> - The address of the Custom Property listing.</li><li><strong>Edit Custom Property Listing</strong> - Access the <em>Edit Custom Property Listing</em> page for this listing.</li><li><strong>Delete Custom Property Listing</strong> - Access the <em>Delete Custom Property Listing</em> page for this listing.</li></ul></small>"><i class="fa fa-question-circle"></i></button>
<!-- TMPL_IF add_mode -->
<h1>Add Custom Property Listing</h1>
<!-- /TMPL_IF -->
<!-- TMPL_IF edit_mode -->
<h1>Edit Custom Property Listing</h1>
<!-- /TMPL_IF -->
<!-- TMPL_IF delete_mode -->
<h1>Delete Custom Property Listing</h1>
<!-- /TMPL_IF -->
</div>
</div>
<form id="fileupload" method="post" action="<!-- TMPL_VAR request_path -->">
<div class="row-fluid">
<!-- TMPL_IF error_message -->
<div class="alert alert-danger alert-dismissable" role="alert" >
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
Warning!<br />
<!-- TMPL_VAR error_message ESCAPE=0 -->
</div>
<!-- /TMPL_IF -->
</div>
<div class="row-fluid">
<fieldset>
<div class="form-group col-md-6">
<label class="col-md-6">Listing Category</label>
<!-- TMPL_VAR category ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Listing ID</label>
<!-- TMPL_VAR listing_id ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Agent Name</label>
<!-- TMPL_VAR l_ag1_id ESCAPE=0 -->
</div>
</fieldset>
</div>
<hr />
<div class="row-fluid">
<fieldset>
<div class="form-group col-md-6">
<label class="col-md-6">Price</label>
<!-- TMPL_VAR price ESCAPE=0 -->
</div>
<div class="row-fluid">
<div class="form-group col-md-6">
<label class="col-md-6">Street Address</label>
<!-- TMPL_VAR street_no ESCAPE=0 --> <!-- TMPL_VAR street ESCAPE=0 -->
</div>
</div>
<div class="form-group col-md-6">
<label class="col-md-6">City</label>
<!-- TMPL_VAR city ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">State</label>
<!-- TMPL_VAR state ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Zip Code</label>
<!-- TMPL_VAR zip ESCAPE=0 -->
</div>
</fieldset>
</div>
<hr />
<div class="row-fluid">
<fieldset>
<div class="form-group col-md-6">
<label class="col-md-6">Description</label>
<!-- TMPL_VAR remarks_general ESCAPE=0 -->
</div>
</fieldset>
</div>
<hr />
<div class="row-fluid">
<fieldset>
<div class="form-group col-md-6">
<label class="col-md-6">Business Type</label>
<!-- TMPL_VAR business_type ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">For Lease</label>
<!-- TMPL_VAR for_lease_yn ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">For Sale</label>
<!-- TMPL_VAR for_sale_yn ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Parcel Type</label>
<!-- TMPL_VAR parcel_type ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Area</label>
<!-- TMPL_VAR area_desc ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">County</label>
<!-- TMPL_VAR county ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">School District</label>
<!-- TMPL_VAR schools_d ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Elementary School</label>
<!-- TMPL_VAR schools_e ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">High School</label>
<!-- TMPL_VAR schools_h ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Year Built</label>
<!-- TMPL_VAR year_built ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Type</label>
<!-- TMPL_VAR type ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Rooms</label>
<!-- TMPL_VAR no_rooms ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Bedrooms</label>
<!-- TMPL_VAR bdrms ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Baths, Full</label>
<!-- TMPL_VAR baths_full ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Baths, Half</label>
<!-- TMPL_VAR baths_part ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Approx. Sq. Ft.</label>
<!-- TMPL_VAR sqft ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Approx. Lot Size</label>
<!-- TMPL_VAR lot_size ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Approx. Acre</label>
<!-- TMPL_VAR acres ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Foundation</label>
<!-- TMPL_VAR foundation ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Exterior</label>
<!-- TMPL_VAR exterior ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Heating</label>
<!-- TMPL_VAR heating ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Cooling</label>
<!-- TMPL_VAR cooling ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Fuel</label>
<!-- TMPL_VAR heat_fuel ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Parking Spaces</label>
<!-- TMPL_VAR gar_prk_no ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Sewer</label>
<!-- TMPL_VAR sewer ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Water</label>
<!-- TMPL_VAR water ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Fireplace</label>
<!-- TMPL_VAR fireplace ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Tax 1</label>
<!-- TMPL_VAR tax_1 ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Tax 2</label>
<!-- TMPL_VAR tax_2 ESCAPE=0 -->
</div>
<div class="form-group col-md-6">
<label class="col-md-6">Six Month Tax</label>
<!-- TMPL_VAR six_mo_taxes ESCAPE=0 -->
</div>
</fieldset>
</div>
<hr />
<!-- TMPL_IF delete_mode -->
<p>
<!-- TMPL_LOOP Thumbnails -->
<img src="/custom_prop/photo_thumbnail?filename=<!-- TMPL_VAR filename -->">
<!-- /TMPL_LOOP -->
</p>
<!-- TMPL_ELSE -->
<!-- Start Upload -->
<noscript><p>JavaScript is required for photo upload.</p></noscript>
<input type="hidden" name="nonce" value="<!-- TMPL_VAR nonce -->"/>
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="row fileupload-buttonbar">
<div class="col-md-7">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="icon-plus icon-white"></i>
<span>Add photos...</span>
<input type="file" name="files" multiple>
</span>
<button type="submit" class="btn btn-primary start">
<i class="icon-upload icon-white"></i>
<span>Start upload</span>
</button>
<button type="reset" class="btn btn-warning cancel">
<i class="icon-ban-circle icon-white"></i>
<span>Cancel upload</span>
</button>
<button type="button" class="btn btn-danger delete">
<i class="icon-trash icon-white"></i>
<span>Delete</span>
</button>
<!-- The loading indicator is shown during file processing -->
<span class="fileupload-loading"></span>
</div>
<!-- The global progress information -->
<div class="span5 fileupload-progress fade">
<!-- The global progress bar -->
<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
<div class="bar" style="width:0%;"></div>
</div>
<!-- The extended global progress information -->
<div class="progress-extended"> </div>
</div>
</div>
<!-- The table listing the files available for upload/download -->
<table role="presentation" class="table table-striped"><tbody class="files"></tbody></table>
<!-- The blueimp Gallery widget -->
<div id="blueimp-gallery" class="blueimp-gallery blueimp-gallery-controls" data-filter=":even">
<div class="slides"></div>
<h3 class="title"></h3>
<a class="prev">‹</a>
<a class="next">›</a>
<a class="close">×</a>
<a class="play-pause"></a>
<ol class="indicator"></ol>
</div>
<!-- /TMPL_IF -->
<div class="row">
<div class="col-md-6">
<!-- TMPL_IF edit_mode -->
<input type="submit" name="submit" class="btn btn-primary" value="Save"/>
<input type="submit" name="cancel" class="btn" value="Cancel"/>
<!-- /TMPL_IF -->
<!-- TMPL_IF add_mode -->
<input type="submit" name="submit" class="btn btn-primary" value="Save"/>
<input type="submit" name="cancel" class="btn" value="Cancel"/>
<!-- /TMPL_IF -->
<!-- TMPL_IF delete_mode -->
<p>Are you sure you want to delete this listing?</p>
<input type="submit" name="confirm" class="btn btn-primary" value="Yes"/>
<input type="submit" name="cancel" class="btn" value="No"/>
<!-- /TMPL_IF -->
</div>
</div>
</form>
</div>
</div>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade">
<td>
<span class="preview"></span>
</td>
<td>
<p class="name">{%=file.name%}</p>
{% if (file.error) { %}
<div><span class="label label-important">Error</span> {%=file.error%}</div>
{% } %}
</td>
<td>
<p class="size">{%=o.formatFileSize(file.size)%}</p>
{% if (!o.files.error) { %}
<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div>
{% } %}
</td>
<td>
{% if (!o.files.error && !i && !o.options.autoUpload) { %}
<button class="btn btn-primary start">
<i class="icon-upload icon-white"></i>
<span>Start</span>
</button>
{% } %}
{% if (!i) { %}
<button class="btn btn-warning cancel">
<i class="icon-ban-circle icon-white"></i>
<span>Cancel</span>
</button>
{% } %}
</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
<td>
<span class="preview">
{% if (file.thumbnailUrl) { %}
<a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a>
{% } %}
</span>
</td>
<td>
<p class="name">
<a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a>
</p>
{% if (file.error) { %}
<div><span class="label label-important">Error</span> {%=file.error%}</div>
{% } %}
</td>
<td>
<span class="size">{%=o.formatFileSize(file.size)%}</span>
</td>
<td>
<button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
<i class="icon-trash icon-white"></i>
<span>Delete</span>
</button>
</td>
</tr>
{% } %}
</script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
<script src="/static/uploadlib/js/vendor/jquery.ui.widget.js"></script>
<!-- The Templates plugin is included to render the upload/download listings -->
<script src="/static/uploadlib/js/tmpl.min.js"></script>
<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
<script src="/static/uploadlib/js/load-image.min.js"></script>
<!-- blueimp Gallery script -->
<script src="/static/uploadlib/js/jquery.blueimp-gallery.min.js"></script>
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<script src="/static/uploadlib/js/jquery.iframe-transport.js"></script>
<!-- The basic File Upload plugin -->
<script src="/static/uploadlib/js/jquery.fileupload.js"></script>
<!-- The File Upload processing plugin -->
<script src="/static/uploadlib/js/jquery.fileupload-process.js"></script>
<!-- The File Upload image preview & resize plugin -->
<script src="/static/uploadlib/js/jquery.fileupload-image.js"></script>
<!-- The File Upload validation plugin -->
<script src="/static/uploadlib/js/jquery.fileupload-validate.js"></script>
<!-- The File Upload user interface plugin -->
<script src="/static/uploadlib/js/jquery.fileupload-ui.js"></script>
<!-- The main application script -->
<script>
$(function () {
'use strict';
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
url: '/custom_prop/file_upload_handler?nonce=<!-- TMPL_VAR nonce -->'
});
// Load existing files:
$('#fileupload').addClass('fileupload-processing');
$.ajax({
url: $('#fileupload').fileupload('option', 'url'),
dataType: 'json',
context: $('#fileupload')[0]
}).always(function () {
$(this).removeClass('fileupload-processing');
}).done(function (result) {
$(this).fileupload('option', 'done')
.call(this, null, {result: result});
});
});
</script>
<!-- End Upload -->
答案 0 :(得分:1)
还有其他事情需要检查。
如果您在bootstrap.js
之前加入jquery.js
,也会导致这种情况。
因此,请确保在jQuery
之前加入bootstrap
。
就我而言,问题如下:
其实我正在使用pre-jQuery Rails
,所以当我收录Bootstrap
个JS文件时,我并不认为包含与它们捆绑在一起的jQuery
版本会导致任何问题,但当我删除一个JS文件时,一切都开始完美。
还有一个可能的情况是,可能有多个实例 页面中的jQuery。所以搜索jQuery和的重复版本 如果有的话,删除它们。
这是一个很好看的链接。