jQuery - 如何在重新加载后触发事件 - ONLY ONCE
jQuery - How to trigger an event after reload - ONLY ONCE
所以这就是我想要做的 - 我希望每次用户 select 在 'select' 有不同的选项时,都会激活不同的功能。每个 'selected:option' 都有不同的功能。
用下面的代码可能更容易理解:
$('.edd-variable-pricing-switcher').change(function() {
if($(this).val() == 1) {
$('.chackout-licence-private').css('display', 'block');
}
else {
$('.chackout-licence-private').css('display', 'none');
}
if(e.originalEvent) {
window.location.reload(true);
}
}).change();
现在可以使用了,当我在 select 中选择值为“1”的选项时(select class=".edd-variable-pricing-switcher") ,我有 div 和 class “.chackout-licence-private” 显示块。
我的问题是 - 页面永远不会停止重新加载。当我在最后触发更改事件时,它会导致无休止的页面重新加载,但如果不触发更改事件,页面重新加载后更改将不再存在。
我正在尝试寻找的解决方案是如何在页面仅重新加载一次后触发更改事件,这样页面就不会一直循环重新加载。
谢谢
编辑
我正在添加一些代码..
1. 这是我正在尝试影响和显示的 html(通常是 display:none):
<div class="chackout-licence">
<div class="chackout-licence-private">
<h3>Private Licence</h3>
<p>
A single track licence for online entertainment video....
</p>
</div><!--chackout-licence-private-->
select 和选项代码部分来自插件,所以我从 inspect 元素添加图像:
说明:我正在尝试为产品创建可变定价,因此在结帐时用户将能够决定他将使用哪个许可证购买产品。所以他从 select 中选择了一个选项,然后每个选项都显示了关于每个许可证的不同描述。
好吧,您正在跟踪一个更改事件,在该函数中执行某些操作,但在您再次触发更改事件之后。
$('.edd-variable-pricing-switcher').change(function() { ... }).change();
是您的代码。最后一个 .change()
触发另一个变化,因此会重复。
像这样删除最后一个.change()
$('.edd-variable-pricing-switcher').change(function() {...});
how can I trigger the change event after the page reloads only once,
so the page won't keep reloading in sort of a loop
[编辑] 我认为这个可行:
jQuery( function( $ ) {
/**
* Hides (default) or shows an element.
*
* @param s mixed A DOM selector. E.g. .my-class or #my-unique-id
* @param show bool If TRUE, shows the element. Otherwise, hides it.
* @return object The target element.
*/
function toggleDisplay( s, show ) {
if ( show ) {
return $( s ).show();
} else {
return $( s ).hide();
}
}
/*
* You may also instead target the SELECT's "name" value. I.e.
* $( 'select[name="edd-variable-pricing-switcher[60]"]' )
*/
$( 'select.edd-variable-pricing-switcher' ).each( function() {
// Saves the default value. (on-page cache)
$( this ).data( '_defaultValue', this.value );
// When the value changes, reloads the page.
$( this ).on( 'change', function() {
var _defaultValue = $( this ).data( '_defaultValue' );
// Invalid value.
if ( ! this.value ) {
// Hides .chackout-licence-private
toggleDisplay( '.chackout-licence-private' );
}
// It's the default value. ("no" changes)
else if ( this.value === _defaultValue ) {
/*
* Shows .chackout-licence-private, if value is 1; otherwise,
* hides it.
*/
toggleDisplay( '.chackout-licence-private', '1' === this.value );
}
// It's a valid new value.
else {
// The TRUE below - are you 100% sure you want to force reload?
window.location.reload( true );
}
} );
/*
* When the page loads (i.e. first load or after a reload), shows/hides
* the appropriate DIV. In this case, we show .chackout-licence-private
* if value is 1; otherwise, hides it.
*/
toggleDisplay( '.chackout-licence-private', '1' === this.value );
} );
} );
所以这就是我想要做的 - 我希望每次用户 select 在 'select' 有不同的选项时,都会激活不同的功能。每个 'selected:option' 都有不同的功能。 用下面的代码可能更容易理解:
$('.edd-variable-pricing-switcher').change(function() {
if($(this).val() == 1) {
$('.chackout-licence-private').css('display', 'block');
}
else {
$('.chackout-licence-private').css('display', 'none');
}
if(e.originalEvent) {
window.location.reload(true);
}
}).change();
现在可以使用了,当我在 select 中选择值为“1”的选项时(select class=".edd-variable-pricing-switcher") ,我有 div 和 class “.chackout-licence-private” 显示块。 我的问题是 - 页面永远不会停止重新加载。当我在最后触发更改事件时,它会导致无休止的页面重新加载,但如果不触发更改事件,页面重新加载后更改将不再存在。
我正在尝试寻找的解决方案是如何在页面仅重新加载一次后触发更改事件,这样页面就不会一直循环重新加载。
谢谢
编辑
我正在添加一些代码.. 1. 这是我正在尝试影响和显示的 html(通常是 display:none):
<div class="chackout-licence">
<div class="chackout-licence-private">
<h3>Private Licence</h3>
<p>
A single track licence for online entertainment video....
</p>
</div><!--chackout-licence-private-->
select 和选项代码部分来自插件,所以我从 inspect 元素添加图像:
说明:我正在尝试为产品创建可变定价,因此在结帐时用户将能够决定他将使用哪个许可证购买产品。所以他从 select 中选择了一个选项,然后每个选项都显示了关于每个许可证的不同描述。
好吧,您正在跟踪一个更改事件,在该函数中执行某些操作,但在您再次触发更改事件之后。
$('.edd-variable-pricing-switcher').change(function() { ... }).change();
是您的代码。最后一个 .change()
触发另一个变化,因此会重复。
像这样删除最后一个.change()
$('.edd-variable-pricing-switcher').change(function() {...});
how can I trigger the change event after the page reloads only once, so the page won't keep reloading in sort of a loop
[编辑] 我认为这个可行:
jQuery( function( $ ) {
/**
* Hides (default) or shows an element.
*
* @param s mixed A DOM selector. E.g. .my-class or #my-unique-id
* @param show bool If TRUE, shows the element. Otherwise, hides it.
* @return object The target element.
*/
function toggleDisplay( s, show ) {
if ( show ) {
return $( s ).show();
} else {
return $( s ).hide();
}
}
/*
* You may also instead target the SELECT's "name" value. I.e.
* $( 'select[name="edd-variable-pricing-switcher[60]"]' )
*/
$( 'select.edd-variable-pricing-switcher' ).each( function() {
// Saves the default value. (on-page cache)
$( this ).data( '_defaultValue', this.value );
// When the value changes, reloads the page.
$( this ).on( 'change', function() {
var _defaultValue = $( this ).data( '_defaultValue' );
// Invalid value.
if ( ! this.value ) {
// Hides .chackout-licence-private
toggleDisplay( '.chackout-licence-private' );
}
// It's the default value. ("no" changes)
else if ( this.value === _defaultValue ) {
/*
* Shows .chackout-licence-private, if value is 1; otherwise,
* hides it.
*/
toggleDisplay( '.chackout-licence-private', '1' === this.value );
}
// It's a valid new value.
else {
// The TRUE below - are you 100% sure you want to force reload?
window.location.reload( true );
}
} );
/*
* When the page loads (i.e. first load or after a reload), shows/hides
* the appropriate DIV. In this case, we show .chackout-licence-private
* if value is 1; otherwise, hides it.
*/
toggleDisplay( '.chackout-licence-private', '1' === this.value );
} );
} );