Javascript 当调用输入文本更改事件时,Drupal进入循环
我正在使用Drupal7,问题是我有一个输入类型文本,用于产品的数量,默认情况下在span中有两个箭头(添加购物车按钮的小部件数量) 当使用js_injector模块获取输入的“change()”事件时,发生了一些奇怪的事情,一个循环开始根据单击的箭头或多或少地更改输入值Javascript 当调用输入文本更改事件时,Drupal进入循环,javascript,jquery,drupal,drupal-7,Javascript,Jquery,Drupal,Drupal 7,我正在使用Drupal7,问题是我有一个输入类型文本,用于产品的数量,默认情况下在span中有两个箭头(添加购物车按钮的小部件数量) 当使用js_injector模块获取输入的“change()”事件时,发生了一些奇怪的事情,一个循环开始根据单击的箭头或多或少地更改输入值 jQuery(function($) { $(document).ready(function(){ $('#edit-quantity').bind('change key
jQuery(function($) {
$(document).ready(function(){
$('#edit-quantity').bind('change keydown keyup click input submit mouseenter', function (e) {alert('Type: ' + e.type); });
});
});
->这可以正常工作,但无法获得箭头范围选项:
$('#edit-quantity').bind('keydown keyup click input submit mouseenter',...
->这些选项将创建一个循环:
$('#edit-quantity').bind('change ...',
或
我的观点是,为什么这个.change()事件会创建这样一个循环?或者更好,我如何阻止它使用事件
谢谢,您可以使用“输入”代替更改
$('#textbox').on('input', function() {
// do your stuff
});
最好不要对文本字段使用更改。单选按钮、选择字段、复选框等更倾向于更改 希望它能帮助别人,最后我只是寻找了所有可能的改变。不仅在输入中,而且在用span表示的“按钮”处。我做了一些小把戏,结果是这样的:
jQuery(function($) {
function value()
{
if($(this).index()!=0) //Just execute once
{
var price=parseFloat(document.getElementsByClassName('field-item')[0].innerHTML.replace(' €','')).toFixed(2);
var quantity = parseFloat($("#edit-quantity").val());
price *= quantity;
var glbvar = price.toFixed(2).replace('.',',')+' €';
//Set Price
document.getElementsByClassName('field-name-commerce-price')[0].getElementsByClassName('field-item')[0].innerHTML = glbvar ;
}
}
$(document).ready(function(){
//When refreshing the value get lost:
if( parseFloat($("#edit-quantity").val()) != 1) value();
/*For input*/ $("#edit-quantity").bind("propertychange keyup paste input",value);
/*For span*/ $('span').bind('click',value);
});
});
谢谢@JSunny,但我已经将“输入”放在了选项之间,正如您在第二行代码中看到的那样。这不是一个完整的解决方案,因为它没有考虑增加或减少值的“按钮”,甚至关键字箭头。
jQuery(function($) {
function value()
{
if($(this).index()!=0) //Just execute once
{
var price=parseFloat(document.getElementsByClassName('field-item')[0].innerHTML.replace(' €','')).toFixed(2);
var quantity = parseFloat($("#edit-quantity").val());
price *= quantity;
var glbvar = price.toFixed(2).replace('.',',')+' €';
//Set Price
document.getElementsByClassName('field-name-commerce-price')[0].getElementsByClassName('field-item')[0].innerHTML = glbvar ;
}
}
$(document).ready(function(){
//When refreshing the value get lost:
if( parseFloat($("#edit-quantity").val()) != 1) value();
/*For input*/ $("#edit-quantity").bind("propertychange keyup paste input",value);
/*For span*/ $('span').bind('click',value);
});
});