Javascript 以编程方式单击标签/收音机或火灾事件
我正在编写一个用户脚本,将自定义javascript注入页面的头部。容易的豌豆Javascript 以编程方式单击标签/收音机或火灾事件,javascript,jquery,userscripts,Javascript,Jquery,Userscripts,我正在编写一个用户脚本,将自定义javascript注入页面的头部。容易的豌豆 // ==UserScript== // @name *** (BLOCKED DUE TO NDA) // @namespace *** (BLOCKED DUE TO NDA) // @description *** (BLOCKED DUE TO NDA) // @include *** (BLOCKED DUE TO NDA) // @author Aaron K. Henderson // @v
// ==UserScript==
// @name *** (BLOCKED DUE TO NDA)
// @namespace *** (BLOCKED DUE TO NDA)
// @description *** (BLOCKED DUE TO NDA)
// @include *** (BLOCKED DUE TO NDA)
// @author Aaron K. Henderson
// @version 1.0
// ==/UserScript==
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= '***.js';
head.appendChild(script);
我注入的.js使用了页面上已经使用的jQuery来进行一些css更改以及自动化一些普通任务
$(document).ready(function() {
// Rename Approve All Button
$('#approve-all-button span').text('Scan + Detect');
// The Magic
$('#approve-all-button').click(function(i) {
var Current_Name = '';
// Loop through TR
$('tr').each(function(i) {
if (i > 0) {
// Get Current Username in Loop
Current_Name = $(this).children('.username').text();
// Apply Default Color to All (Green)
$(this).css('background-color', '#0AFE47');
// Apply Approved Class to All
$(this).addClass('AddApproved');
// Hide Creation Date / Last Login
$(this).children('.nowrap').css('opacity','.1').css('background-color','white');
// Get Current Username Length
var nlen = Current_Name.length;
// If Name Length is <= 3 or >= 15 Apply Color (Red)
if (nlen <= 3) {
$(this).css('background-color','#FF7575');
$(this).addClass('AddDeleted');
$(this).removeClass('AddApproved');
$(this).removeClass('AddInactive');
}
if (nlen >= 15) {
$(this).css('background-color','#FF7575');
$(this).addClass('AddDeleted');
$(this).removeClass('AddApproved');
$(this).removeClass('AddInactive');
}
var nDigits = 0;
for ( var t=0; t<nlen; t++) {
var chr = Current_Name.charAt(t);
if (chr >= "0" && chr <= "9") nDigits++;
}
var charcount = nlen - nDigits;
if ((nDigits >=6) || (charcount < 3) || (nDigits == nlen)) {
$(this).css('background-color','#FF7575');
$(this).addClass('AddDeleted');
$(this).removeClass('AddApproved');
$(this).removeClass('AddInactive');
}
}
});
});
// On Button Click, Change Background and Add/Remove class
$('label').click(function(i) {
var button = $(this).attr('for');
var status = button.substring(button.lastIndexOf('-') + 1);
if (status == 'status_D') {
$(this).closest('tr').css('background-color','#FF7575');
$(this).addClass('AddDeleted');
$(this).removeClass('AddApproved');
$(this).removeClass('AddInactive');
} else if (status == 'status_A') {
$(this).closest('tr').css('background-color','#0AFE47');
$(this).addClass('AddApproved');
$(this).removeClass('AddInactive');
$(this).removeClass('AddDeleted');
} else if (status == 'status_I') {
$(this).closest('tr').css('background-color','#0AFE47');
$(this).addClass('AddInactive');
$(this).removeClass('AddApproved');
$(this).removeClass('AddDeleted');
}
});
});
上面的按钮代码有100次迭代。ID的每个迭代集都有一个变量,每个迭代增加1,例如
id="form-0-status_D"
id="form-1-status_D"
id="form-2-status_D"
id="form-3-status_D"
id="form-4-status_D"
如您所见,我使用jQuery的each循环遍历页面上的每个标记,并使用某种形式的$this进行必要的更改
当标签和输入的ID为动态时,如何自动选择“删除”按钮?我如何才能真正点击“已删除”按钮
此外,为了消除任何混淆,我只需添加AddApproved/AddInactive/AddDeleted类,以便于统计
我还没有实现这个计数器,但我已经知道如何使它工作
另外,这是我第一次使用jQuery,所以这不仅是一次学习经历,也是我工作场所的一个工具。如果某些代码看起来不正确,我道歉
编辑+
我已经按照建议进行了检查和“重构”。实际上,我注意到处理所有表行的速度略有提高
另外,根据建议,我添加了一些形式的“$”form-“+I+”-status_D”。触发“click”;”我的剧本。但是,当我保存并运行脚本时,删除按钮不会在应该的时候触发。我劫持并变成扫描+检测的Approve All的默认操作仍然适用。我试着加上I;但dafault行动仍在执行
新代码:
$(document).ready(function() {
// Rename Approve All Button
$('#approve-all-button span').text('Scan + Detect');
// The Magic
$('#approve-all-button').click(function(i) {
i.preventDefault();
var Current_Name = '';
// Loop through TR
$('tr').each(function(i) {
if (i > 0) {
var _self = $(this)
// Get Current Username in Loop
Current_Name = _self.children('.username').text();
// Apply Default Color to All (Green)
_self.css('background-color', '#0AFE47');
// Apply Approved Class to All
_self.addClass('AddApproved');
// Hide Creation Date / Last Login
_self.children('.nowrap').css('opacity','.1').css('background-color','white');
// Get Current Username Length
var nlen = Current_Name.length;
// If Name Length is <= 3 or >= 15 Apply Color (Red)
if ((nlen <= 3) || (nlen >= 15)){
_self.css('background-color','#FF7575').
addClass('AddDeleted').
removeClass('AddApproved').
removeClass('AddInactive');
$(_self).children('#form-'+i+'-status_D').trigger('click');
}
var nDigits = 0;
for ( var t=0; t<nlen; t++) {
var chr = Current_Name.charAt(t);
if (chr >= "0" && chr <= "9") nDigits++;
}
var charcount = nlen - nDigits;
if ((nDigits >=6) || (charcount < 3) || (nDigits == nlen)) {
_self.css('background-color','#FF7575').
addClass('AddDeleted').
removeClass('AddApproved').
removeClass('AddInactive');
$(_self).children('#form-'+i+'-status_D').trigger('click');
}
}
});
});
// On Button Click, Change Background and Add/Remove class
$('label').click(function(i) {
var _self = $(this)
var button = _self.attr('for');
var status = button.substring(button.lastIndexOf('-') + 1);
if (status == 'status_D') {
_self.closest('tr').css('background-color','#FF7575').
addClass('AddDeleted').
removeClass('AddApproved').
removeClass('AddInactive');
} else if (status == 'status_A') {
_self.closest('tr').css('background-color','#0AFE47').
addClass('AddApproved').
removeClass('AddInactive').
removeClass('AddDeleted');
} else if (status == 'status_I') {
_self.closest('tr').css('background-color','#0AFE47').
addClass('AddInactive').
removeClass('AddApproved').
removeClass('AddDeleted');
}
});
});
编辑++
从技术上讲,我不需要Approve All功能,这就是为什么我用自己的clickfunction{}劫持了它。我尝试添加$'Approve-All-button span'。取消绑定'click';不幸的是,在保存和刷新页面后,原来的approve all功能仍然存在。卡滞+1
编辑+++
我在那里发现了我的错误,我仍然包括我复制并粘贴的行中的span标记。当我从代码$'approve-all-button'中删除span时,取消绑定'click';不再调用原始事件。我需要弄清楚的是如何手动单击按钮,即通过编程方式。签出。它可以让你随意地举办活动
在这种情况下,它将类似于:
$('#form-'+i+'-status_D').trigger('click');
此外,我建议进行一些重构:
// If Name Length is <= 3 or >= 15 Apply Color (Red)
if (nlen <= 3 || nlen >= 15) {
$(this).css('background-color','#FF7575').
addClass('AddDeleted').
removeClass('AddApproved').
removeClass('AddInactive');
}
正如我在你问的另一个问题上所解释的那样,触发器不起作用。另一个答案似乎是正确的,因为您只关注触发器
似乎您没有任何与单选按钮关联的JS代码。在这种情况下,我会:
$(_self).children('#form-'+i+'-status_D').prop("checked", true);
这就是你所需要的。如果我做得不对,我向你道歉。stackoverflow的第一次用户。我是否必须在编辑问题后将其重新放到问题的第一页?通常,您应该删除任何不再适用的代码,因为很难判断实际问题是什么。如果你想得到更多的帮助,你可以对你的问题悬赏,尽管这可能是不可能的,因为你是一个新用户,或者作为一个不同的问题来问。这似乎是我想要它做的。这只是让.trigger'click'触发的问题。当我把它放在脚本中时,第一次运行该行时实际上失败了。放置一些Try/Catch提醒我此类型错误:对象没有方法“prop”,您使用的是哪个版本的jQuery?prop函数在jQuery 1.6+中可用。请考虑使用最新的jQuery
<html>
<head>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('#click-me').click(function() {
$('label[for=test]').trigger('click');
});
});
</script>
</head>
<body>
<span id="click-me">Click Me</span>
<input type="radio" id="test">
<label for="test">Deleted</label>
</body>
</html>
$(_self).children('#form-'+i+'-status_D').prop("checked", true);