在表格中,我有一行有两个输入 - 一个选择和一个文本。我想要实现的是,如果一个有值,那么另一个(在同一行)应该禁用。当文本框中有值时,这可正常 onload ,但仅当选择框中有值时似乎不起作用。
正如您在此处的示例中所见:http://jsfiddle.net/anAgent/UBUhn/1/“更改”事件正常运行,但无效 onload 。
非常感谢任何帮助!
我正在使用jQuery 1.5.2以及Google Chrome和IE9
使用最终代码进行更新
感谢@scoopseven和@eicto提供的意见。基于这两个答案,这是最终的代码。我希望它可以帮助别人。
$(document).ready(function() {
$(".validation-compare").change(runRowValidation);
$(".validation-compare").each(runRowValidation);
});
function runRowValidation() {
var $me = $(this),
$other = $('.validation-compare',$me.closest("tr")).not($me),
mVal = $me.val(),
oVal =$other.val();
if(mVal != "" && oVal == "") {
$me.removeAttr('disabled');
$other.attr('disabled',1);
} else if(mVal == "" && oVal != "") {
$other.removeAttr('disabled');
$me.attr('disabled',1);
} else {
$other.removeAttr('disabled');
$me.removeAttr('disabled');
}
}
中看到它的实际效果
答案 0 :(得分:1)
var validme=function() {
var me=$(this);
me.removeClass('validation-compare');
if (me.val()) {
console.log(me);
me.addClass('valid');
me.parent().parent().find('.validation-compare').attr('disabled',1);
me.addClass('validation-compare');
return;
}
me.removeClass('valid');
if (me.parent().parent().find('.validation-compare.valid').length<1) {
me.parent().parent().find('.validation-compare').removeAttr('disabled'); }
me.addClass('validation-compare');
}
$('.validation-compare').each(validme);
$('.validation-compare').change(validme)
答案 1 :(得分:1)
我认为您不需要设置班级valid
,您只需要更换
var $otherInput = $('.validation-compare', $parent).not('.valid');
通过
var $otherInput = $('.validation-compare', $parent).not($me);
这将解决您在 onload 上的问题。这是example
答案 2 :(得分:0)
您需要将该功能分开并在点击事件和页面加载时调用它。像这样:
jQuery(function($){
function myFunction() {
// do somestuff
}
// myFunction needs to be called when select is clicked and when page is loaded
$('#someelement').click(myFunction);
$(document).ready(myFunction);
});