【发布时间】:2016-05-30 20:49:09
【问题描述】:
所以,我创建了 2 个插件,每个插件都加载到一个页面中,plugin1 -> regionpages (http://192.0.0.0/index.php/regionpages/) 和 plugin2 -> regionresults (http://192.0.0.0/index.php/searchresults/)。
插件 1,以及相关的 javascript:
function initialize() {
feedData();
categoriesData();
}
jQuery(document).ready(function () {
initialize();
jQuery('#CountryList').change(function(){
var enableButtonTemp = jQuery('#CountryList').val();
if (enableButtonTemp === null || enableButtonTemp === "null" || enableButtonTemp === "") { //Check to see if there is any text entered
console.log(enableButtonTemp);
jQuery('.enableOnInput').prop('disabled', true);
} else if (enableButtonTemp !== null || enableButtonTemp !== "null" || enableButtonTemp !== "") {
console.log("The value of countries is " + enableButtonTemp + " so the submit button has been made clickable.");
jQuery('.enableOnInput').prop('disabled', false);
}
});
});
function feedData() {
jQuery(document).ready(function () {
console.log("feedData is successfully hit.");
var serialized = jQuery('#MyForm').serialize();
jQuery.ajax({
cache: false,
type: "POST",
async: false,
url: gymRegions.ajaxurl,
data:{action: "showcountries", makeselection: "getCountryList", serialized},
success: function (data, status, error) {
//alert(data.html);
jQuery('#CountryList').append(data.html);
},
error: function (data, status, error) {
alert("failed in feedData. The following data is being returned: " + data.html);
console.log(data);
console.log(status);
console.log(error);
}
});
});
}
function categoriesData(){
jQuery(document).ready(function () {
console.log("categoriesData is successfully hit.");
var serialized = jQuery('#MyForm').serialize();
jQuery.ajax({
cache: false,
type: "POST",
async: false,
url: gymRegions.ajaxurl,
data:{action: "showcountries", makeselection: "categoriesList", serialized},
dataType: "json",
success: function (data) {
jQuery('#CategoriesList').append(data.html);
},
error: function (data, status, error) {
console.log(data);
console.log(status);
console.log(error);
}
});
});
}
function getCities() {
jQuery(document).ready(function () {
console.log("getCities is successfully hit.");
jQuery('#CityList').empty();
jQuery('#TownList').empty();
var countryVal = jQuery("#CountryList").val();
var serialized = jQuery('#MyForm').serialize();
jQuery.ajax({
cache: false,
type: "POST",
async: false,
url: gymRegions.ajaxurl,
data:{action: "showcountries", makeselection: "getCityList", countryID: countryVal, serialized},
dataType: "json",
success: function (data) {
jQuery('#CityList').append(data.html);
},
error: function (data, status, error) {
console.log(data);
console.log(status);
console.log(error);
}
});
});
}
function getTowns() {
jQuery(document).ready(function () {
console.log("getTowns is successfully hit.");
var cityVal = jQuery("#CityList").val();
var serialized = jQuery('#MyForm').serialize();
jQuery.ajax({
cache: false,
type: "POST",
async: false,
url: gymRegions.ajaxurl,
data:{action: "showcountries", makeselection: "getTownList", cityID: cityVal, serialized},
dataType: "json",
success: function (data) {
console.log(data);
jQuery('#TownList').append(data.html);
},
error: function (data, status, error) {
console.log(data);
console.log(status);
console.log(error);
}
});
});
}
function getUserIDs() {
jQuery(document).ready(function () {
console.log("getUserIDs is successfully hit.");
var countryVal = jQuery("#CountryList").val();
var cityVal = jQuery("#CityList").val();
var townVal = jQuery("#TownList").val();
var categoriesVal = jQuery("#CategoriesList").val();
var serialized = jQuery('#MyForm').serialize();
var url = window.location.hostname;
jQuery.ajax({
cache: false,
type: "POST",
async: false,
url: gymRegions.ajaxurl,
data:{action: "showcountries",
makeselection: "getUserIDs",
countryID: countryVal,
cityID: cityVal,
townID: townVal,
categoriesID: categoriesVal,
locationHref: url,
serialized},
dataType: "json",
success: function (data) {
localStorage.setItem('dataObjectTemp2', JSON.stringify(data));
var numericRecCount = parseInt(data.c);
jQuery('#MyForm').submit(function (data) {
jQuery.post('', function (data) {
document.location.href = window.location.hostname + '/index.php/searchresults/';
});
return false;
});
},
error: function (data, status, error) {
alert("No records were returned for your search. Please make another selection.");
console.log(data);
console.log(status);
console.log(error);
}
});
});
}
function getregions_scripts() {
wp_enqueue_script(
'getregions-script',
plugin_dir_url(__FILE__) . "assets/getregions.js",
array('jquery'),
'1.0',
true
);
wp_localize_script(
'getregions-script',
'gymRegions',
array('ajaxurl' => admin_url('admin-ajax.php'))
);
}
add_action( 'wp_enqueue_scripts', 'getregions_scripts' );
if ( is_admin() ) {
add_action( 'wp_ajax_showcountries', 'showcountries_callback' );
add_action( 'wp_ajax_no_priv_showcountries', 'showcountries_callback' );
add_action( 'wp_ajax_showcountries_frontend', 'showcountries_frontend' );
add_action( 'wp_ajax_no_priv_showcountries_frontend', 'showcountries_frontend' );
}else{
}
function showcountries_callback() {
}
function showcountries_frontend() {
$the_html = '
<form id="MyForm" method="Post">
<div style="float: left">
<select id="CountryList" onchange="getCities()" style="width: 150px !important; min-width: 150px; max-width: 150px;"></select>
<select id="CityList" onchange="getTowns()" style="width: 150px !important; min-width: 150px; max-width: 150px;"></select>
<select id="TownList" style="width: 150px !important; min-width: 150px; max-width: 150px;"></select>
<select id="CategoriesList" style="width: 170px !important; min-width: 170px; max-width: 170px;"></select>
</div>
<input type="submit" name="submit" id="submitBtn" class="enableOnInput" disabled="disabled" onclick="getUserIDs()" />
</form>';
return $the_html;
}
add_shortcode("sc_frontend", "showcountries_frontend");
Plugin2,和它关联的javascript:
(function( $ ) {
"use strict";
$(function() {
$(document).ready(function () {
feedNewResults();
function feedNewResults() {
//$(document).ready(function () {
var dataObject2 = JSON.parse(localStorage.getItem('dataObjectTemp2'));
$('#searchNewCount').append(dataObject2.c);
$('#searchNewResult').append(dataObject2.q);
}
function locationChange(val){
localStorage.setItem('dataDetailedSearch', JSON.stringify(val));
window.location.href = window.location.hostname + "/index.php/detailed-search-results/?uid=" + val;
}
});
});
}(jQuery));
function getnewsearchresults_scripts() {
wp_enqueue_script(
'getnewsearchresults-script',
plugin_dir_url(__FILE__) . "assets/getnewsearchresults.js",
array('jquery'),
'1.0',
true
);
wp_localize_script(
'getnewsearchresults-script',
'resultsNewSearch',
array('ajaxurl' => admin_url('admin-ajax.php'))
);
}
add_action( 'wp_enqueue_scripts', 'getnewsearchresults_scripts' );
add_action( 'wp_ajax_newsearchresults', 'newsearchresults_callback' );
add_action( 'wp_ajax_no_priv_newsearchresults', 'newsearchresults_callback' );
现在有趣的部分来了。如果我停用插件 2,插件 1 可以正常工作。但是,如果我激活插件 2,则只会填充插件 1 的国家和类别下拉列表。尝试选择一个国家来填充与相关国家城市的城市下拉列表,将无法正常工作。这在所有浏览器中都是一致的。
如何解决这个 jQuery 冲突问题?
【问题讨论】:
标签: javascript php jquery html wordpress