javascript

您所在的位置:网站首页 ajax变量作用域 javascript

javascript

2024-06-18 05:47| 来源: 网络整理| 查看: 265

3 个答案:

答案 0 :(得分:1)

focusout的事件不会添加到input,直到您click按钮: 另外,我不知道这是否是您复制和粘贴HTML和Javascript的方式,但是当我把它放在小提琴中时,它会抛出错误。

按照Rory指出的那样,将其移到按钮单击处理程序之外:

var formname; $(document).ready(function() { //Now focusout handler is added on DOM Ready instead of when you click the button $('input#namef').on('focusout', function(){ formname= $('input#namef').val(); console.log(formname); }); $(document).on('click', '#check_out_cart', function(){ var scart_add = $("input[name='scart_add']").val(); console.log("Scart value is "+scart_add); console.log("Name is "+formname); }); });

这是一个工作的小提琴:https://jsfiddle.net/hqgv7zsa/

答案 1 :(得分:0)

这是一种竞赛条件。

在document.ready事件中,您正在设置点击事件处理程序 在点击处理程序中,您正在设置focusout事件处理程序 由于点击处理程序仍在执行, 立即,代码运行以显示Scart和Formname的值。   

当时,formname仍然为空,因为当前函数   (点击事件处理程序)仍在执行,焦点事件,甚至   如果触发,将在执行该代码后触发。

您应该将focusout处理程序声明代码移到click处理程序代码之外,这将在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的回答,将焦点处理程序声明移到click。处理程序外部的document.ready处理程序的范围内。

答案 2 :(得分:0)

使用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); }); });


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3