Javascript 为什么不是';t正在提取的字符串的值?

Javascript 为什么不是';t正在提取的字符串的值?,javascript,jquery,html,Javascript,Jquery,Html,我正在阅读《雄辩的Javascript》一书,其中一个练习有点麻烦(我把所有的练习放在一个页面上,这不是我要求的)。基本上,它要求创建一个函数,该函数将遍历一个字符串,找到该字符串中的“B”数,然后返回该数。由于某些原因,它只返回0。函数本身很好,但我很难找到修复它的方法 $(document).ready(function() { var text = $('#beaninput').val(); function countBeans(string) { va

我正在阅读《雄辩的Javascript》一书,其中一个练习有点麻烦(我把所有的练习放在一个页面上,这不是我要求的)。基本上,它要求创建一个函数,该函数将遍历一个字符串,找到该字符串中的“B”数,然后返回该数。由于某些原因,它只返回0。函数本身很好,但我很难找到修复它的方法

$(document).ready(function() {
    var text = $('#beaninput').val();
    function countBeans(string) {
        var beanCounter = 0;
        for (i = 0; i < string.length; i++) {
            if (string.charAt(i) == "B") {
                beanCounter += 1;
            };
        };
        return beanCounter;
    };
    $('#beanbutton').click(function() {
        $('#beanbot').empty();
        $('#beanbot').append(countBeans(text) + " Beans");
    });
});
$(文档).ready(函数(){
var text=$('#beaninput').val();
函数countBeans(字符串){
var-beanCounter=0;
对于(i=0;i
作为参考,#beaninput是一个HTML文本输入字段,#beanbutton是一个按钮,它应该在#beanbot中显示“B”的数量

谢谢


编辑:谢谢大家!很好

在“就绪”初始化期间,您的代码只获取一次文本字段的值。它应该获取“click”处理程序中的值


将声明
text
变量的行移动到按钮的“click”处理程序的开头。

在“ready”初始化过程中,您的代码只获取一次文本字段的值。它应该获取“click”处理程序中的值


将声明
text
变量的行移动到按钮的“click”处理程序的开头。

您应该在
onClick
事件处理程序中移动
text
赋值:

$('#beanbutton').click(function() {
    var text = $('#beaninput').val();
    $('#beanbot').empty();
    $('#beanbot').append(countBeans(text) + " Beans");
});

您应该在
onClick
事件处理程序中移动
text
赋值:

$('#beanbutton').click(function() {
    var text = $('#beaninput').val();
    $('#beanbot').empty();
    $('#beanbot').append(countBeans(text) + " Beans");
});

您需要移动
var text=$('#beaninput').val()
。单击
函数,否则其值将始终为
0
,即:

$(文档).ready(函数(){
函数countBeans(字符串){
var-beanCounter=0;
对于(i=0;i

您需要移动
var text=$(“#beaninput”).val()
。单击
函数,否则其值将始终为
0
,即:

$(文档).ready(函数(){
函数countBeans(字符串){
var-beanCounter=0;
对于(i=0;i

触发DOM就绪(
DOMContentLoaded
)事件时,输入值为空。
您应该在希望处理该值的位置读取该值

$(文档).ready(函数(){
$('#bean')。在(“输入”,函数()上){
var=this.value.match(/b/gi);
$('output').val(bees?bees.length:0);
});
});

触发DOM就绪(
DOMContentLoaded
)事件时,输入值为空。
您应该在希望处理该值的位置读取该值

$(文档).ready(函数(){
$('#bean')。在(“输入”,函数()上){
var=this.value.match(/b/gi);
$('output').val(bees?bees.length:0);
});
});


您可能需要输入
var text=$(“#beaninput').val()
处理程序内单击
在计数前获取最新值。按照现在的方式,它只会在页面加载时使用初始值,该值将为空
处理程序内单击
在计数前获取最新值。按照现在的方式,它只会在页面加载时使用初始值,该值将为空。