为什么不抓住所选的选项?

时间:2011-06-15 21:26:37

标签: javascript prototypejs

    <div class='divver'>
        Quantity:&nbsp;
        <select class='box' name='qty' id='quantity'>
        <option value='1'>1</option>
        <option value='2'>2</option>
        <option value='3'>3</option>
        <option value='4'>4</option>
            </select>
    </div>

<script type="text/javascript">
    var s = document.getElementById("quantity");
    var quant = s.options[s.selectedIndex].text;
    function checkIt(){
    alert (quant);
    }
</script>

提交成功后我正在运行checkIt。

function submitQuickview()
    {
        if(productForm.validate()){

            //submit the form with ajax
            new Ajax.Request($('product_addtocart_form').action, {
                parameters: $('product_addtocart_form').serialize(true),
                onSuccess: checkIt
            });
        }

        return false;
    }

有什么问题?无论提交的选项的值如何,它始终将1作为quant var警告。有什么想法吗?请注意,我没有使用jQuery并且在Vanilla或Prototype框架中工作。

2 个答案:

答案 0 :(得分:3)

这是因为您在加载页面时为quant变量赋值。

为了获得当前值
1)您需要在 checkin 功能中读取所选值    将代码更改为:

var s = document.getElementById("quantity");     
function checkIt(){     
 var quant = s.options[s.selectedIndex].text;     
 alert (quant); 
}

2)触发select的onchange事件时更改值。    类似的东西:

var s = document.getElementById("quantity");     
var quant = s.options[s.selectedIndex].text;     
s.onchange = function(){
    quant = s.options[s.selectedIndex].text;     
}

function checkIt(){     
 alert (quant); 
}

答案 1 :(得分:0)

此方法避免创建循环引用(或创建循环引用的闭包),并避免全局变量。

function submitQuickview() {

   var s = document.getElementById("quantity");

        if(productForm.validate()){

            //submit the form with ajax
            new Ajax.Request($('product_addtocart_form').action, {
                parameters: $('product_addtocart_form').serialize(true),
                onSuccess: checkIt
            });
        }

        return false;
    }

function checkIt() {
   var s = document.getElementById("quantity");
   // grab your value
   var quant = s.options[s.selectedIndex].text;
   alert(quant);
}