首次单击时,jQuery单选按钮值将返回undefined,直到选择更改为止

时间:2013-05-01 14:42:32

标签: jquery forms radio

我可以对此代码使用一些帮助。

我创建了一个小提示来展示问题 - http://jsfiddle.net/r4hqC/

我试图读取2个无线电组的值,然后通过GET请求(Ajax)发送它们的值。

除第一次无线电点击外,代码有效,其中无线电的值返回为未定义,直到无线电更改为止。这种情况发生在两个群体上。

以下是代码:

function jsdatabaseMatch()
{
     $(document).ready(function(){
         $(".form1").change(function () {window.vala = $('.form1:checked').val(); //Radio group 1
         $(".form2").change(function () {window.valb = $('.form2:checked').val(); //Radio group 2
            });
           });
         });
     alert(window.vala); //Radio 1 contains..
     alert(window.valb); //Radio 2 contains..

     var getr = window.vala + "&pricerange=" + window.valb; //GET request
         if (window.XMLHttpRequest)
         {
             xmlhttp=new XMLHttpRequest();
         }
         else
         {
             xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
         }
         xmlhttp.open("GET","showcase.php?yes="+getr,false); //Prepare GET Request
         xmlhttp.send();
         document.getElementById("pricecompare").innerHTML=xmlhttp.responseText;
}

我尝试将.change替换为.click,结果是相同的。

提前致谢。

解决了tymeJV

  • 从执行onclick
  • 的HTML中删除了jsdatabaseMatch个触发器
  • 在广播function jsdatabaseMatch()事件中的jQuery中执行.change

这是:

$(document).ready(function(){
    $(".form1").change(function () {window.vala = this.value;}); //Radio group 1
    $(".form1").change(jsdatabaseMatch); //Radio group 1
    $(".form2").change(function () {window.valb = this.value;}); //Radio group 2
    $(".form2").change(jsdatabaseMatch); //Radio group 2
    });

function jsdatabaseMatch()
{
    alert(window.vala);
    alert(window.valb);
    var getr = window.vala + "&pricerange=" + window.valb; //GET request
    if (window.XMLHttpRequest)
    {
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","showcase.php?yes="+getr,false); //Prepare GET Request
    xmlhttp.send();
    document.getElementById("pricecompare").innerHTML=xmlhttp.responseText;
}

1 个答案:

答案 0 :(得分:0)

完成后,您需要关闭更改事件。另外,使用this选择器分配值。

$(".form1").change(function() {
    window.vala = this.value; //Radio group
}); // <---You can always add .change() right here to fire the event on DOM ready.

$(".form2").change(function () {
    window.valb = this.value; //Radio group 2
});