2012-07-31 58 views
1

在表中,我有一行有兩個輸入 - 一個選擇和一個文本。我想實現的是,如果有一個值,那麼另一個(在同一行)應該禁用。這可以正常工作onload當文本框中有一個值時,但只有在選擇框中有值時才起作用。jQuery - 禁用基於同一行上的另一個元素選擇

正如你可以在這裏看到的例子:http://jsfiddle.net/anAgent/UBUhn/1/「change」事件正常工作,但它不起作用onload

任何幫助將大大感激!

我用jQuery 1.5.2,並與谷歌瀏覽器和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'); 
    } 
}​ 

你可以看到它在行動:http://jsfiddle.net/anAgent/UBUhn/24/

回答

1

我不認爲你需要設置類valid,所有你需要做的就是更換

var $otherInput = $('.validation-compare', $parent).not('.valid'); 

通過

var $otherInput = $('.validation-compare', $parent).not($me); 

這將解決您的問題onload。這裏是一個example

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); 

    }); 
+0

onload事件已經設置和工作。我不希望點擊元素時觸發事件 - 只會改變。如何在有價值的情況下解決選擇問題? – anAgent 2012-07-31 13:53:16

+0

$('#someelement')。change(myFunction); – scoopseven 2012-07-31 14:06:08

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) 

http://jsfiddle.net/UBUhn/22/

相關問題