2011-05-05 2 views
0

в следующем, я использую фильтр ('input: text, textarea'), чтобы установить поля ввода только как прочитанные (и сделать их непрозрачными). Однако этот селектор выбирает только текстовые входы, а не текстовое поле. Что я делаю не так?Почему этот селектор jquery не выбирает textarea?

<!DOCTYPE html> 
<html> 
    <head> 
    <title>setReadOnly() Test</title> 
    <link rel="stylesheet" type="text/css" href="../styles/core.css"> 
    <link rel="stylesheet" type="text/css" href="test.setReadOnly.css"> 
    <script type="text/javascript" src="../scripts/jquery-1.4.js"></script> 
    <script type="text/javascript" src="../scripts/jqia2.support.js"></script> 
    <script type="text/javascript"> 
     (function($){ 
      $.fn.setReadOnly = function(readonly) { 
      return this.filter('input:text,textarea') 
       .attr('readOnly',readonly) 
       .css('opacity', readonly ? 0.5 : 1.0) 
       .end(); 
      }; 
     })(jQuery); 
    </script> 
    <script type="text/javascript"> 
     $(function(){ 
     $('#sameAddressControl').click(function(){ 
      var same = this.checked; 
      $('#billAddress').val(same ? $('#shipAddress').val():''); 
      $('#billCity').val(same ? $('#shipCity').val():''); 
      $('#billState').val(same ? $('#shipState').val():''); 
      $('#billZip').val(same ? $('#shipZip').val():''); 
      $('#bill_random_field').val(same ? $('#ship_random_field').val():''); 
      $('#billingAddress input').setReadOnly(same); 
     }); 
     }); 
    </script> 
    </head> 

    <body> 

    <div data-module="Test setReadOnly()"> 

     <form name="testForm"> 
     <div> 
      <label>First name:</label> 
      <input type="text" name="firstName" id="firstName"/> 
     </div> 
     <div> 
      <label>Last name:</label> 
      <input type="text" name="lastName" id="lastName"/> 
     </div> 
     <div id="shippingAddress"> 
      <h2>Shipping address</h2> 
      <div> 
      <label>Street address:</label> 
      <input type="text" name="shipAddress" id="shipAddress"/> 
      </div> 
      <div> 
      <label>City, state, zip, random_field:</label> 
      <input type="text" name="shipCity" id="shipCity"/> 
      <input type="text" name="shipState" id="shipState"/> 
      <input type="text" name="shipZip" id="shipZip"/> 
      <textarea name="random_field" rows="2" cols="20" id="ship_random_field"></textarea> 
      </div> 
     </div> 
     <div id="billingAddress"> 
      <h2>Billing address</h2> 
      <div> 
      <input type="checkbox" id="sameAddressControl"/> 
      Billing address is same as shipping address 
      </div> 
      <div> 
      <label>Street address:</label> 
      <input type="text" name="billAddress" 
        id="billAddress"/> 
      </div> 
      <div> 
      <label>City, state, zip, random_field:</label> 
      <input type="text" name="billCity" id="billCity"/> 
      <input type="text" name="billState" id="billState"/> 
      <input type="text" name="billZip" id="billZip"/> 
      <textarea name="random_field" rows="2" cols="20" id="bill_random_field"></textarea> 
      </div> 
     </div> 
     </form> 
    </div> 

    </body> 
</html> 

ответ

2

Попробуйте изменить линию $('#billingAddress input').setReadOnly(same); к $('#billingAddress input,textarea').setReadOnly(same);

Update

На самом деле, должно быть, как вы сказали в комментариях: $('#billingAddress input,#billingAddress textarea').

+0

Интересно, что это не сработало, но изменило его на '$ ('# billingAddress input, # billingAddress textarea'). SetReadOnly (тот же);' работал. Я озадачен, почему ваше предложение не сработало. – jela

+0

Предложение не работает, потому что вы пытаетесь фильтровать сам элемент, а не контент. Вместо этого вы можете попробовать '$ ('# billingAddress'). Find ('*'). SetReadOnly (тот же)' или переписать свой фильтр, чтобы сделать this.find ('*') .. '. – Shagglez

+0

Извините, я забыл поставить 'input, textarea' – Tulio

Смежные вопросы