3 回答
![?](http://img1.sycdn.imooc.com/54584ee0000179f302200220-100-100.jpg)
TA贡献1906条经验 获得超10个赞
这在某种程度上是一种竞争条件。
在document.ready事件中,您正在设置点击事件处理程序
在单击处理程序中,您正在设置focusout事件处理程序
由于单击处理程序仍在执行,因此代码立即运行以显示 scart 和 formname 的值。
那时,formname仍然是空的,因为当前函数(单击事件处理程序)仍在执行,并且 focusout 事件即使触发,也会在执行该代码后触发。
您应该将focusout处理程序声明代码移到单击处理程序代码之外,然后将在 document.ready() 事件上设置两个处理程序。
以下是正在发生的事情和时间的细分:
var formname;
$(document).ready(function() {
这在加载 DOM 时触发(document.ready事件)
$(document).on('click', '#check_out_cart', function(){
当用户点击某个带有 ID 的元素时会触发 check_out_cart
$('input#namef').on('focusout', function(){
此事件处理程序仅在用户单击购物车时设置,但尚未执行!
formname= $('input#namef').val();
console.log(formname);
});
一旦为 设置了事件处理程序,此代码就会触发focusout,但仍未执行。即使focusout触发了一个事件,它也只会在当前函数退出时执行。
var scart_add = $("input[name='scart_add']").val();
console.log("Scart value is "+scart_add);
正确地,此时您将看到它formname是空的。
console.log("Name is "+formname);
...
});
});
希望这能解释您所看到的流程;
在 Ryan Wilson 的回答中快速修复,将焦点处理程序声明移动到单击处理程序之外的 document.ready 处理程序的范围内。
![?](http://img1.sycdn.imooc.com/545865890001495702200220-100-100.jpg)
TA贡献2036条经验 获得超8个赞
使用Unable to fetch values from an input element in Bootstrap's popover 中的解决方案,我能够调整我的 JS 代码,以使用 popover JS 添加的 .popover-content 类中的 .find 来获取值。
var formname;
var formemail;
$(document).ready(function() {
//shopping cart
/*load functions*/
load_product();
load_cart_data();
$('#cart-popover').popover({
html : true,
container: 'body',
content:function(){
return $('#popover_content_wrapper').html();
}
});
$(document).on('click', '#cart-popover', function(){
$('input#namef').focus();
});
$(document).on('focusout', '#namef', function(){
formname = $('.popover-content').find('#namef').val();
});
$(document).on('focusout', '#emailf', function(){
formemail = $('.popover-content').find('#emailf').val();
});
$(document).on('click', '#check_out_cart', function(){
var scart_add = $("input[name='scart_add']").val();
var nameval = $("input#namef").val();
alert("Scart value is "+scart_add);
alert("Name is "+formname);
alert("Email is "+formemail);
});
});
添加回答
举报