我试图修改jquery UI微调器的行为,并希望避免黑客攻击原始的js文件。这是一个名为_doSpin的js文件中的一个函数,如果我修改我可以实现我想要的效果(我希望它以百分比的形式更改值 - 而不是像内置的百分比方法那样给用户提供一个真正的百分比,但是我需要正常的整数增加或减少一个百分比,不得有100%到0%的界限。
但我不想破解原始文件,因此我想在我的页面中使用ui.spinner.js覆盖该函数。我无法从我的html页面中找到如何到达库文件的命名空间。我已经尝试过stackoverflow提供的大量提示,但似乎在我的情况下都没有。库文件以(function($,undefined))开头,但是我无法理解我在html页面中定义的命名空间是如何定义的,因此我可以在'中断'并覆盖函数。
BTW函数在库文件内部使用,在这种情况下可能无法覆盖它?我不想在我的html页面中本地使用它,我调用更高级的方法来开展业务,我只需要更改库内部的工作方式。
答案 0 :(得分:0)
首先,您是否完全确定通过指定微调器对象的选项无法解决问题?似乎使用min
,max
和step
选项,您可以使step
成为创建微调器或集合时所需范围的任意百分比范围。这是step
选项的the doc。
如果这是一个内部函数(未在公共API中公开或作为公共对象上的方法公开),那么一切都取决于它是如何编码的。如果它没有放入公共名称空间并且在其他功能中定义,那么你就无法重新定义它。函数的内部不是你可以从Javascript中的函数外部获得的东西,除非它们以某种方式显式地被公众访问。
如果它位于某个公共API中,那么您可以将新函数分配给API所在的任何符号并替换原始函数(通常首先保存原始函数,以便在需要时仍然可以使用它)。
如果您没有向我们展示您想要覆盖的实际代码,我们无法更具体地为您提供帮助。仅供参考,我无法在jQueryUI source repository中找到名为_doSpin
的功能,因此我不知道您尝试覆盖哪些代码的功能。
修改:在Google搜索中,我发现another version of a jQuery UI spinner确实有_doSpin()
方法。在该版本中,_doSpin()
方法最终作为spinner窗口小部件对象(它是用于其所有对象的jQuery UI对象结构)的原型上的方法。我个人对jQueryUI没有多少经验,但是从小工具上阅读他们的文档,听起来你可以继承现有的widget并替换原型上的方法。或者,您可能直接破解原型 - 虽然需要做一些工作来弄清楚jQueryUI存储它的方式/位置或者如何到达它。
答案 1 :(得分:0)
最终这项工作做得更好。
<html>
<script type='text/javascript'>
var mainarray = [1,2,3,4,5];
function scrolltxtbox (e) {
var evt=window.event || e;
var delta=evt.detail ? evt.detail*(-120) : evt.wheelDelta;
var targ;
if (evt.target) targ = evt.target;
else if (evt.srcElement) targ = evt.srcElement;
(delta<=-120)?multiplier=0.95:multiplier=1.05;
changeweight(targ.id, multiplier);
if (evt.preventDefault)
evt.preventDefault()
else return false
}
function changeweight(targid, multiplier) {
var u = targid.match(/myspinner(.*)/);
mainarray[u[1]] = mainarray[u[1]]*multiplier;
document.getElementById(targid).value = mainarray[u[1]].toPrecision(3);
}
var mousewheelevt=(/Firefox/i.test(navigator.userAgent))? "DOMMouseScroll" : "mousewheel"
var index;
for (index = 0; index < mainarray.length; ++index) {
document.write('<input type="text" size=6 id="myspinner'+index+'" value='+mainarray[index]+' autocomplete="off"><br>');
if (window['myspinner'+index].attachEvent) {
window['myspinner'+index].attachEvent("on"+mousewheelevt, scrolltxtbox);
} else if (window['myspinner'+index].addEventListener) {
window['myspinner'+index].addEventListener(mousewheelevt, scrolltxtbox, false);
}
}
</script>
</html>
它可能(绝对是!)过度,但效果很好。