转换 jquery/js 函数以将页面之间的变量传递给 ColdFusion 变量
Convert jquery/js function to pass variable between pages to a ColdFusion variable
我有一些 jquery 检查特定元素在页面上是否可见并传递要附加到 url 的参数,因此该元素可以 shown/hidden下一页。
我想看看是否可以将这个值存储在一个 coldfusion 变量中,然后通过导航传递它,因为这对我来说似乎是一种更可靠的方法。
这是我的基本 html:
<nav>
<ul id="mainNav" class="clearfix">
<li><a href="/">Main</a></li>
<li><a href="#" class="<cfif VARIABLES.primarydir EQ 'work'>clicked</cfif>">Work</a></li>
<li><a href="/about" class="<cfif VARIABLES.primarydir EQ 'about'>clicked</cfif>">About</a></li>
<li><a href="/news" class="<cfif VARIABLES.primarydir EQ 'news'>clicked</cfif>">News </a></li>
<li><a href="/tumblr.com" target="_blank">Blog</a></li>
</ul>
<ul id="subNav">
<li><a href="/work/effort" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'effort'>clicked</cfif>">Effort, We Cried!</a></li>
<li><a href="/work/why" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'why'>clicked</cfif>">Why Do We Do This</a></li>
<li><a href="/work/guests" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'guests'>clicked</cfif>">Guests & Hosts</a></li>
<li><a href="/work/prettygirls" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'prettygirls'>clicked</cfif>">Pretty Girls Doing Horrid Things</a></li>
</ul>
</nav>
#subNav
在css中默认设置为隐藏。
我想有一些基本的 jquery 来切换 subNav 的可见性:
var toggleSubNav = (function(){
trigger.on('click',function(){
subNav.toggleClass('visible', function(){
subNavLength = subNav.is(':visible');
});
return false;
});
}());
然后是第二个函数,它检查 subNav 的可见性并附加 url:
merge.on('click',function(){
var url = $(this).attr('href');
subNavLength = subNav.is(':visible');
if(subNavLength){
window.location = url + '?subnav=true';
}else{
window.location = url;
}
return false;
});
最后一个函数检查 url 的 '?subnav=true' 内容以在下一页显示:
var subNavProp = (function(){
if(href.indexOf('?subnav=true') > 0){
subNav.addClass('visible');
}else{
subNav.removeClass('visible');
}
}());
变量 subNavLength
是全局变量,通过这些不同的函数进行更新。
我意识到我发布了很多 jquery 并且我真的不知道如何(或是否)有办法将其转换为冷融合的后端解决方案。我的想法是我可以在 subNav 元素上切换一个 class,如果是这样的话:
<ul id="subNav" class="<cfif var IS true">className</cfif>">
但我想知道这是否仍然需要某种前端解决方案。或者即使有另一种更好的方法来做到这一点?
老实说,您有几个选择,但没有必要让服务器端参与其中。连好处都没有。
一种方法,也可能是我要采取的方法,是使用 javascript cookie 或 localStorage 来存储设置,这样可以保持干净的 url。
另一条路线正在使用 jQuery 类似的东西。我正在使用复选框来切换添加,但它可以是任何变量,例如您的 subNavLength
我设计这个示例来影响以 /
开头的网址,因此 #
网址和外部网址是安全的。
演示:JSFiddle
$(document).ready(function () {
$(document).on("click","a",function(e) {
// This is just to demonstrate the change without trying to leave
// JSFiddle, you can remove this whole function (a.click)
alert($(this).attr("href"));
e.preventDefault();
});
$(document).on("change","#navChanger",function(e) {
$("a").each(function () {
if($(this).attr("href").charAt(0) == "/") {
if(document.getElementById("navChanger").checked) {
if ($(this).attr("href").split("?").length > 1) {
$(this).attr("href",$(this).attr("href") + "&subnav=true");
} else {
$(this).attr("href",$(this).attr("href") + "?subnav=true");
}
} else {
$(this).attr("href",$(this).attr("href").replace(/.subnav=true$/i,"g"));
}
}
})
});
});
或者,您可以通过以下方式使用 localStorage 获得更清晰的结果,因为它不会更改 url。单击设置按钮后重新运行脚本以查看更改。 (demo)
var defaultOptions = {NavDisplay: true};
var options;
$(document).ready(function () {
options = (JSON.parse(localStorage.getItem("options"))||defaultOptions)
alert("NavDisplay set to: " + options.NavDisplay)
$(document).on("click", '#sFalse', function(e) {
options.NavDisplay = false;
localStorage.setItem("options", JSON.stringify(options))
});
$(document).on("click", '#sTrue', function(e) {
options.NavDisplay = true;
localStorage.setItem("options", JSON.stringify(options))
});
});
我有一些 jquery 检查特定元素在页面上是否可见并传递要附加到 url 的参数,因此该元素可以 shown/hidden下一页。
我想看看是否可以将这个值存储在一个 coldfusion 变量中,然后通过导航传递它,因为这对我来说似乎是一种更可靠的方法。
这是我的基本 html:
<nav>
<ul id="mainNav" class="clearfix">
<li><a href="/">Main</a></li>
<li><a href="#" class="<cfif VARIABLES.primarydir EQ 'work'>clicked</cfif>">Work</a></li>
<li><a href="/about" class="<cfif VARIABLES.primarydir EQ 'about'>clicked</cfif>">About</a></li>
<li><a href="/news" class="<cfif VARIABLES.primarydir EQ 'news'>clicked</cfif>">News </a></li>
<li><a href="/tumblr.com" target="_blank">Blog</a></li>
</ul>
<ul id="subNav">
<li><a href="/work/effort" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'effort'>clicked</cfif>">Effort, We Cried!</a></li>
<li><a href="/work/why" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'why'>clicked</cfif>">Why Do We Do This</a></li>
<li><a href="/work/guests" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'guests'>clicked</cfif>">Guests & Hosts</a></li>
<li><a href="/work/prettygirls" class="<cfif VARIABLES.primarydir EQ 'work' and VARIABLES.secondarydir EQ 'prettygirls'>clicked</cfif>">Pretty Girls Doing Horrid Things</a></li>
</ul>
</nav>
#subNav
在css中默认设置为隐藏。
我想有一些基本的 jquery 来切换 subNav 的可见性:
var toggleSubNav = (function(){
trigger.on('click',function(){
subNav.toggleClass('visible', function(){
subNavLength = subNav.is(':visible');
});
return false;
});
}());
然后是第二个函数,它检查 subNav 的可见性并附加 url:
merge.on('click',function(){
var url = $(this).attr('href');
subNavLength = subNav.is(':visible');
if(subNavLength){
window.location = url + '?subnav=true';
}else{
window.location = url;
}
return false;
});
最后一个函数检查 url 的 '?subnav=true' 内容以在下一页显示:
var subNavProp = (function(){
if(href.indexOf('?subnav=true') > 0){
subNav.addClass('visible');
}else{
subNav.removeClass('visible');
}
}());
变量 subNavLength
是全局变量,通过这些不同的函数进行更新。
我意识到我发布了很多 jquery 并且我真的不知道如何(或是否)有办法将其转换为冷融合的后端解决方案。我的想法是我可以在 subNav 元素上切换一个 class,如果是这样的话:
<ul id="subNav" class="<cfif var IS true">className</cfif>">
但我想知道这是否仍然需要某种前端解决方案。或者即使有另一种更好的方法来做到这一点?
老实说,您有几个选择,但没有必要让服务器端参与其中。连好处都没有。
一种方法,也可能是我要采取的方法,是使用 javascript cookie 或 localStorage 来存储设置,这样可以保持干净的 url。
另一条路线正在使用 jQuery 类似的东西。我正在使用复选框来切换添加,但它可以是任何变量,例如您的 subNavLength
我设计这个示例来影响以 /
开头的网址,因此 #
网址和外部网址是安全的。
演示:JSFiddle
$(document).ready(function () {
$(document).on("click","a",function(e) {
// This is just to demonstrate the change without trying to leave
// JSFiddle, you can remove this whole function (a.click)
alert($(this).attr("href"));
e.preventDefault();
});
$(document).on("change","#navChanger",function(e) {
$("a").each(function () {
if($(this).attr("href").charAt(0) == "/") {
if(document.getElementById("navChanger").checked) {
if ($(this).attr("href").split("?").length > 1) {
$(this).attr("href",$(this).attr("href") + "&subnav=true");
} else {
$(this).attr("href",$(this).attr("href") + "?subnav=true");
}
} else {
$(this).attr("href",$(this).attr("href").replace(/.subnav=true$/i,"g"));
}
}
})
});
});
或者,您可以通过以下方式使用 localStorage 获得更清晰的结果,因为它不会更改 url。单击设置按钮后重新运行脚本以查看更改。 (demo)
var defaultOptions = {NavDisplay: true};
var options;
$(document).ready(function () {
options = (JSON.parse(localStorage.getItem("options"))||defaultOptions)
alert("NavDisplay set to: " + options.NavDisplay)
$(document).on("click", '#sFalse', function(e) {
options.NavDisplay = false;
localStorage.setItem("options", JSON.stringify(options))
});
$(document).on("click", '#sTrue', function(e) {
options.NavDisplay = true;
localStorage.setItem("options", JSON.stringify(options))
});
});