动态禁用/启用文本框

时间:2014-01-06 10:03:20

标签: javascript jquery

我在尝试使此代码工作时遇到问题。目的只是在从DropList中选择“Bus”选项时启用文本框。

目前我有一个for循环运行并禁用所有必要的框(有15个相同的行)。同时,它启用了一个不同的功能,该功能基于改变同一个框中的选择,这是有效的。虽然有问题的功能不起作用。

这是功能:

$(function () {

    for(var i=0;i<15;i++){ //loop through each of the rows
        $("#Select" + i + "Box_C").change(callbackFactory(i)); //This is a working  function
        $("#Select" + i + "Box_C").change(toBus(i)); //This one isn't working
        $("#Text" + i + "Box_Q1").prop('disabled', true); //this one is working
    };
    function busEnabler(num){
        $("#Text" + num + "Box_Q1").prop('disabled', false);
        };

    function toBus(numm){
        var jk = numm //Closures confuse me
        if ($("#Select" + numm + "Box").val() === "Bus"){
            $("#Text" + numm + "Box_Q1").prop('disabled', false);
            console.log(jk);
            busEnabler(jk);
            }
        else {
            $("#Text" + numm + "Box_Q1").prop('disabled', true);
            console.log($("#Select" + numm + "Box_C") + "=" + $("#Select" + numm + "Box_C").val());
        }
        };
});

ID已经编好了(真正的ID被命名 - 不是我选择的)所以如果ID中有拼写错误,那就无关紧要了。

另外作为附注,我在页面加载后似乎无法将任何内容记录到控制台(使用FireBug)。

callbackFactory:

function callbackFactory(i){
        console.log('changing');
        return function(){
            transportChange($("#_Q0_Q"+ i +"_Q3_C").val(), i);
        };

2 个答案:

答案 0 :(得分:2)

问题在于您附加onchange事件的方式。 以下语句(您已使用过)不附加任何方法。

 $("#Select" + i + "Box_C").change(toBus(i));

因此,只要选择框的值发生变化,就不会调用'toBus'方法。

我创造了一个小提琴。请参考。 JSFiddle

答案 1 :(得分:0)

使用以下代码作为您的目的,请同时显示函数callbackFactory,以便我可以解决您的完整问题。

$(doucment).on('change', 'select[id^=Select]',function() {
        $('input[id^=Text]').prop({disabled:true});
        var id = $(this).attr('id');
        var txtId = id.replace('Select','Text').replace('Box','Box_Q1');
        if($(this).val() == 'Bus') {
           $('#'+txtId).prop({disabled:false});
        }


});