Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Tampermonkey复选框在重新加载页面后停止工作_Javascript_Jquery_Userscripts_Tampermonkey - Fatal编程技术网

Javascript Tampermonkey复选框在重新加载页面后停止工作

Javascript Tampermonkey复选框在重新加载页面后停止工作,javascript,jquery,userscripts,tampermonkey,Javascript,Jquery,Userscripts,Tampermonkey,我正在使用此代码创建复选框,选中后,将定期单击某些按钮并刷新页面。 这段代码做了正确的事情,问题是在更新页面后,它会取消选中复选框并停止 在代码的最后一部分,我设法使复选框保持选中状态,问题是在更新页面后,即使选中复选框,它也不会继续功能,根据我在测试中观察到的情况,我必须取消选中复选框,然后再次选中才能工作 我相信问题出在代码的开头,但在到处搜索之后,我无法解决这个问题。从我看到的情况来看,它只有在点击复选框时才会响应,而不是在自动选中时 function addDomElements ()

我正在使用此代码创建复选框,选中后,将定期单击某些按钮并刷新页面。
这段代码做了正确的事情,问题是在更新页面后,它会取消选中复选框并停止

在代码的最后一部分,我设法使复选框保持选中状态,问题是在更新页面后,即使选中复选框,它也不会继续功能,根据我在测试中观察到的情况,我必须取消选中复选框,然后再次选中才能工作

我相信问题出在代码的开头,但在到处搜索之后,我无法解决这个问题。从我看到的情况来看,它只有在点击复选框时才会响应,而不是在自动选中时

function addDomElements () {
    var newNodes = $( `
      <div class="mySpamCntrols foundation-radius fightContainer foundation-base-font">
        <input type="checkbox" class="smallerBox" id="EsquerdaHitBox" data-trgtSelctr="#fightButtonBerserk1">
        <label class="checkboxlabel" for="EsquerdaHitBox">Hit Esquerda</label>
        <input type="checkbox" class="smallerBox" id="MeioHitBox" data-trgtSelctr="#fightButtonBerserk1">
        <label class="checkboxlabel" for="MeioHitBox">Hit Meio</label>
        <input type="checkbox" class="smallerBox" id="DireitaHitkBox" data-trgtSelctr="#fightButtonBerserk2">
        <label class="checkboxlabel" for="DireitaHitkBox">Hit Direita</label>
      </div>
    ` );
    //-- Best to add a <style> node, but spam inline styles for now...
    newNodes.find ("input").attr ("style", "margin:1px !important;line-height:10px !important;");
    newNodes.find ("label").attr ("style", "margin-right: 20px;");

    newNodes.insertAfter($('.foundation-radius.fightContainer.foundation-base-font')[1] );

    //-- Activate checkboxes
    $(".mySpamCntrols").on ("change", "input[data-trgtSelctr]", processMyCheckBoxes);
}
addDomElements ();

function processMyCheckBoxes (zEvent) {
    var chkBox = zEvent.target;
    //-- If box is now checked, fire off an immediate click and start the timers
    if (chkBox.checked) {
        clickButtonByjQuerySelector (chkBox.dataset.trgtselctr);
        //chkBox.spamClckTmr   = setInterval (clickButtonByjQuerySelector, 30000, chkBox.dataset.trgtselctr);
        chkBox.spamClckTmr   = setInterval (clickButtonByjQuerySelector, 2222, chkBox.dataset.trgtselctr);
        chkBox.pageReloadTmr = setTimeout  (location.reload.bind (window.location), 300000);
    }
    //-- Else, if box is now not checked, cancel the timers
    else {
        clearInterval (chkBox.spamClckTmr);
        clearTimeout  (chkBox.pageReloadTmr);
    }
}

function clickButtonByjQuerySelector (jQuerySelector) {
    var targetNode = $(jQuerySelector)[0];
    if (targetNode) {
        console.log ("Clicking node: ", jQuerySelector);
        //-- Warning this my not always suffice.  See https://stackoverflow.com/q/15048223
        targetNode.click ();
    }
    else {
        console.warn (`Node [${jQuerySelector}] not found!`);
    }
}

//Save Checkbox
$(function(){
    $('input:checkbox').each(function() {
        var $el = $(this);
        $el.prop('checked', sessionStorage[$el.prop('id')] === 'true');
    });

    $('input:checkbox').on('change', function() {
        var $el = $(this);
        sessionStorage[$el.prop('id')] = $el.is(':checked');
    });
});
函数添加元素(){
var newNodes=$(`
击中埃斯克尔达
打我吧
击中迪雷塔
` );
//--最好添加一个节点,但现在垃圾邮件内联样式。。。
newNodes.find(“输入”).attr(“样式”,“边距:1px!重要;行高:10px!重要;”);
newNodes.find(“标签”).attr(“样式”,“右边距:20px;”);
newNodes.insertAfter($('.foundation radius.fightContainer.foundation base font')[1]);
//--激活复选框
$(.myspamcontrols”)。在(“更改”、“输入[data trgtSelctr]”上,ProcessMy复选框);
}
添加元素();
函数进程我的复选框(zEvent){
var chkBox=zEvent.target;
//--如果现在选中该框,则立即单击并启动计时器
如果(chkBox.checked){
单击按钮byjqueryselector(chkBox.dataset.trgtselctr);
//chkBox.spamClckTmr=setInterval(单击按钮byjqueryselector,30000,chkBox.dataset.trgtselctr);
chkBox.spamClckTmr=setInterval(单击按钮byjqueryselector,2222,chkBox.dataset.trgtselctr);
chkBox.pageReloadTmr=setTimeout(location.reload.bind(window.location),300000);
}
//--否则,如果现在未选中此框,请取消计时器
否则{
clearInterval(chkBox.spamClckTmr);
clearTimeout(chkBox.pagerLoadTMR);
}
}
功能单击按钮BYJQUERYSELECTOR(jQuerySelector){
var targetNode=$(jQuerySelector)[0];
if(targetNode){
console.log(“单击节点:”,jQuerySelector);
//--我的警告并不总是足够的。请参阅https://stackoverflow.com/q/15048223
targetNode.click();
}
否则{
console.warn(`Node[${jQuerySelector}]未找到!`);
}
}
//保存复选框
$(函数(){
$('input:checkbox')。每个(函数(){
var$el=$(本);
$el.prop('checked',会话存储[$el.prop('id')]='true');
});
$('input:checkbox')。在('change',function()上{
var$el=$(本);
会话存储[$el.prop('id')]=$el.is(':checked');
});
});

如何使选中的复选框计时器在重新加载页面后重新启动?

您已经关闭,但设置
checked
属性是不够的。您还必须同步事件处理程序

一个简单的方法就是让代码点击复选框

另外,不需要/使用
$(function(){
包装器

此代码适用于:

//-- Restore and Save Checkboxes from sessionStorage:
$('input:checkbox').each (function () {
    var $el     = $(this);
    var elId    = $el.prop ('id');
    if (sessionStorage[elId] === 'true') {
        document.getElementById (elId).click ();
    }
} );

$('input:checkbox').on ('change', function () {
    var $el = $(this);
    sessionStorage[$el.prop ('id')] = $el.is (':checked');
} );