我在尝试使此代码工作时遇到问题。目的只是在从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);
};
答案 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});
}
});