输入中的输入应逐一显示结果字段中的结果

时间:2013-06-26 08:35:20

标签: javascript jquery

当用户在第一组的单选按钮中选择任何选项,然后在相应的输入字段中输入任意数字,然后选择下一个任何单选项并在输入字段中输入任何值,那么这次应该添加旧结果并将其显示在结果输入字段中,现在如果他清空任何输入字段,那么它也应该从总结果中减去并显示在结果字段中。

我有这么多的团体,但在这里我只是把其中两个人拿到了结果。

此处为FIDDLE

这是jquery代码。我可以在jquery中工作,但不是很好我为每个组使用单独的代码,我知道必须有一种方法通过通用代码获得这整个功能,但我又不擅长jquery

 jQuery("#txt_im").keyup(setValue);
 jQuery('[name="rdbtn-im"]').change(setValue);

function setValue() {
var txt_value = jQuery("#txt_im").val();
var rad_val = jQuery('[name="rdbtn-im"]:checked').val();
if(!txt_value.length) {
    jQuery('#final_res').val('');
    return;        
}

if (!rad_val.length) return;
var res = txt_value * rad_val;
var final = parseInt(res, 10);
var MBresult = final / 1024;


jQuery('#final_res').val(MBresult.toFixed(2));

}

var final2 = 0;

jQuery("#txt_fb").keyup(setValue2); 
jQuery('[name="rdbtn-fb"]').change(setValue2);

function setValue2() {


var txt_value = jQuery("#txt_fb").val();

var rad_val = jQuery('[name="rdbtn-fb"]:checked').val();
 if(!txt_value.length) {
    jQuery('#final_res').val('');
     return;   
 }

if (!rad_val.length) return;
var res2 = txt_value * rad_val;
final2 = parseInt(res2, 10) + final;
var MBresult = final2 / 1024;
jQuery('#final_res').val(MBresult.toFixed(2));


}

infact用户可以自由选择任意数量的组,也可以在选择后随意删除任意数量的组。

我知道当用户选择第一组之后选择第二组时会出现错误,它会删除wron的结果并且我试图解决它但是失败但是我定义了整个看到我需要做的事情。我非常感谢你的这种恩惠。

2 个答案:

答案 0 :(得分:2)

HTML:

<table>
    <tr>
        <td>
            <input type="radio" name="rdbtn-im" id="rdbtn-im-day" value="25" class="rdbtn-style-social" />Daily&nbsp;
            <input type="radio" name="rdbtn-im" id="rdbtn-im-week" value="175" class="rdbtn-style-social" />Weekly
            <input type="text" name="txb3" id="txt_im" class="txt-email" style="width:100px;margin: 2px;" />
        </td>
    </tr>
    <tr>
        <td class="sec-td-rdbtns-social">
            <input type="radio" name="rdbtn-fb" id="rdbtn-fb-day" value="3500" class="rdbtn-style-social" />Daily&nbsp;
            <input type="radio" name="rdbtn-fb" id="rdbtn-fb-week" value="500" class="rdbtn-style-social" />Weekly
            <input type="text" name="txb1" id="txt_fb" class="txt-email" style="width:100px;margin: 2px;" />&nbsp;</td>
    </tr>
</table>
<br>result
<input type="text" name="final_res" id="final_res" class="" style="width:100px;margin: 2px;" />

Jquery的:

jQuery(".txt-email").keyup(setValue);
jQuery('.rdbtn-style-social').change(setValue);

function setValue() {
    var total = 0;
    $(".rdbtn-style-social:checked").each(function () {
        var myInput = $(this).siblings(".txt-email").val();
        if (myInput.length) {
            total += myInput * $(this).val();
        }
    });
    if (total) {
        jQuery('#final_res').val((total / 1024).toFixed(2));
    } else {
        jQuery('#final_res').val('');
    }
}

FIDDLE

答案 1 :(得分:0)

如果您使用的是Chrome,那么控制台是您最好的朋友(https://developers.google.com/chrome-developer-tools/docs/console) 对于firefox你有萤火虫,歌剧有蜻蜓(或类似的东西?)。即使IE现在有控制台。在那里你可以看到弹出的所有错误。

好的,首先让我们通过将它们全部包含在闭包中来清理它(我们现在可以安全地使用$而不是jQuery,即使外部存在名称空间冲突)。此外,我们将在两种情况下使用单一功能,因为它们非常相似。

!function ($) {
    $(".txt-email").keyup(setValue);
    $('.rdbtn-style-social').change(function(e) { setValue(e, true) });

    function setValue(e, radio) {
        if('undefined' === typeof radio) radio = false;
        var attr = radio ? 'name' : 'id';
        var tmp = e.target[attr].split('-');
        var media = tmp[tmp.length - 1];

        var txt_value = $("#txt-"+media).val();
        var rad_val = $('.rdbtn-style-social[name="rdbtn-'+media+'"]:checked').val();
        if (!txt_value.length || !rad_val.length) {
            $('#final_res').val('');
            return false;
        }
        var res = (txt_value | 0) * rad_val;
        var final = parseInt(res, 10);
        var MBresult = final / 1024;
        $('#final_res').val(MBresult.toFixed(2));

    }
}(jQuery);

(变量| 0与parseInt(变量,10)相同)。 所以,长话短说:当无线电或文本被更改时,函数被触发(如果是无线电,则传递附加参数)。我们检索是否要在im或fb上工作,然后做任何你想做的事情。我更改了输入的id以替换_ with -'s(用于分割一致性)

最终的jsfiddle:http://jsfiddle.net/Misiur/f6cxA/1/