我正坐在一段代码上,这在移动设备上是超慢的。
我在 Jquery Mobile 中有一个包含大约 40 个输入元素(按钮)的输入表单。在 Jquery Mobile 中,这意味着:
<div class="ui-btn" data-disabled="false">
<span class="ui-btn-inner">
<span class="ui-btn-text">Button</span>
</span>
<input type="button" value="Button" class="ui-btn-hidden" data-disabled="false">
</div>
通常,我可以绑定到input
,这在所有 PC 浏览器上都可以正常工作,但是一旦我切换到移动设备并且输入元素的数量增加,按钮就会失效。
作为一种解决方法,我现在绑定到最接近的ui-btn
,如下所示:
el.jqmData('bound', true )
.find('input')
.closest('.ui-btn')
.on('vclick', function(){
// do stuff
});
这至少使元素可点击,但它仍然很慢。
我一直在查看与本机 Javascript 方法(如此处jsPerf
)进行比较的示例。如果我假设性能差异为 1:10(就像从台式机切换到移动设备时一样,我很确定我的“最近”调用会减慢速度。closest
我的问题:
有没有办法closest
用原生 Javascript 方法替换我的链式调用?如果是这样,这会是什么样子?
编辑
我已经退出了有问题的功能。这就是我正在做的事情:
// this gets called once for the size entry box
// sizeEntryBox is the wrapper for $('sizeChart'), which contains the 60 inputs
addSizeHandlers = function( el ){
el.jqmData('boundStyle', true)
.find('.sizeChart')
.on('vclick', '.entry .ui-btn', function(){
// since I'm listening for .ui-btn I need to get the child input again
var qty = $( this ).find('input.qtyInput'),
// user can add +1/+2/+4
howMany = qty.closest('.ui-collapsible').find('.buttonBar input[name="radio_add"]:checked').val(),
qid = qty.attr('id').replace( /qty/, "" );
// a button may display a preset qty, clicking once replaces this with
// +1/+2/+4, clicking again adds +1/+2/+4
if ( qty.jqmData('flag') === false ){
qty.jqmData('flag',true)
newVal = parseFloat( howMany );
// set new value, add red borders
qty.val( howMany ).prev('.ui-btn-inner').addClass("brR").find('.ui-btn-text').html( howMany );
$('input[name=menge'+qid+']').val( howMany );
} else {
newVal = parseFloat( qty.val() ) + parseFloat( howMany );
qty.val( newVal ).prev('.ui-btn-inner').addClass("brR").find('.ui-btn-text').html( newVal );
$('input[name=menge'+qid+']').val( newVal );
}
});
},
所以我已经绑定到整个图表并委托给按钮。在移动设备上这仍然需要很长时间,所以一些性能消耗者会引起人们的注意,请告诉我。
再次感谢!