2010-02-23 6 views
1

I 각 행은 체크 박스와 선도적 인 td 및 선택 목록과 다른 td을 포함하는 여러 행을 포함하는 생성 된 테이블 =jQuery를 조건 작업을 할 때 이벤트가 발생

<div class="table"> 
<table width="100%" class="tframe" id="table0"> 
<thead> 
<tr class="trheadline"> 
    <th>Selection</th> 
    <th>Repository-Tag</th> 
</tr> 
</thead> 
<tbody> 
<tr class="trow"> 
    <td> 
     <input type="checkbox" 
      value="0#298#abk_testn#l#CLEARCASE#at_web_vob" 
      name="module">ModuleA 
    </td> 
    <td> 
    <select name="cvstags"> 
     <option value="no_Repository">no_Repository</option> 
     <option value="220607_143102110">220607_143102110</option> 
     <option value="220607_09410236">220607_09410236</option> 
     <option value="220507_091903814">220507_091903814</option> 
    </select> 
    </td> 
</tr> 
<tr class="trow"> 
    <td> 
     <input type="checkbox" 
      value="1#299#abk_integration#d#CLEARCASE#at_web_vob" 
      name="module">ModuleB 
    </td> 
    <td> 
    <select name="cvstags"> 
     <option value="220607_143102110">220607_143102110</option> 
    </select> 
    </td> 
</tr> 
<tr class="trow"> 
    <td> 
     <input type="checkbox" 
      value="2#301#abk_statcont##CLEARCASE#at_web_vob" 
      name="module">ModuleC 
    </td> 
    <td> 
    <select name="cvstags"> 
     <option value="no_Repository">no_Repository</option> 
     <option value="220607_143102110">220607_143102110</option> 
     <option value="220607_09410236">220607_09410236</option> 
     <option value="220507_091903814">220507_091903814</option> 
    </select> 
     </td> 
    </tr> 
    </tbody> 
</table> 
</div> 

가 지금은 변화를 고정 할이 선택에 따라 이벤트,하지만 난 선도 체크 박스가 체크 상태의 경우, 남아 지금은 =

<script> 
    $('select').change(function(){ 
     alert($(this).val()); 
    }); 
</script> 
잘 나에게 선택된 옵션의 값을 제공

하지만이 문제가에 대한 조치는, 시작하려면 =

  1. 같은 tr의 선행 체크 박스가 선택되었는지 확인하는 방법은 무엇입니까? 선택 목록이 가이 경우에 대한 변경 이벤트와 같은 유사한 동작을 달성하는 방법, 내 위의 예제의 두 번째 행에서와 같이 단지 하나의 옵션이있는 경우

    $('select').change(function(){ 
    if (the leading checkbox is checked) { 
        run my action.. 
    } 
    }); 
    
  2. 변경 이벤트가 작동하지 않는 이유는 무엇입니까?

어떤 힌트를 주셔서 감사합니다 !!

답변

1

다른 방법으로 살펴 보겠습니다. 즉, 체크 박스에서 click 이벤트를 처리하고 선택하면 행의 select 값을 평가하는 것이 어떻습니까?

$('tr.trow input:checkbox').click(function() { 
    if (this.checked) { 
     var self = $(this); 
     self.parent().parent().find('select').val(); // value of select 
    } 
} 

편집 :

가 여기에 내가 약을 처리 할 방법은 다음과 같습니다

// use an object literal to prevent global pollution(!) 
var rowActions = { 
    checkbox: function() { 
     if (this.checked) { 
      rowActions.doSomething(); 
     } 
    }, 
    select: function() { 
     if ($(this).parent().parent().find('input:checkbox:checked').length) { 
      rowActions.doSomething(); 
     } 
    }, 
    doSomething: function() { 
     alert('I did something!'); 
    } 
} 

$('tr.trow').each(function() { 
    var self = $(this); 
    self.find('input:checkbox').click(rowActions.checkbox); 
    self.find('select').change(rowActions.select); 
}); 

을하고 여기가 Working Demo 행동에서 보여입니다. 코드로 재생할 URL을 추가/편집하십시오.

+0

도 내 첫 번째 야망 이었지만 정상적인 흐름은 사용자가 전달하고자하는 모듈을 결정하는 것과 같기 때문에 관련 체크 박스를 확인합니다. 그 후 그는 적절한 태그를 선택합니다. 옵션을 선택하고, 마음이 바뀌는 것을 의미합니다. 확인란이 선택 상태를 유지하지만 선택된 옵션이 변경됨을 의미합니다. 만약 내가 그런 식으로한다면 해결책은 무엇일까요 ?? – Rebse

+0

.. 그럼에도 불구하고 다른 방법으로 솔루션을 게시 할 수 있습니까? – Rebse

+0

글쎄, 그 행에 대한 선택에 단 하나의 옵션 만 있다면, 사용자는 마음을 바꿀 수 없으므로 사용자가 체크 박스를 체크/체크하지 않을 때 (노트 : 클릭 이벤트 사용) 행동하는 것이 안전합니다. select 요소의 change 이벤트에 이벤트 처리기를 바인딩하여 확인란에서 실행되는 것과 동일한 코드를 실행할 수도 있습니다. 따라서 코드를 개별 함수로 추출하고 각각의 경우에 이벤트 핸들러 내부에서 호출하십시오. –

0

초만 있지만 이전 방법을 살펴보십시오. 예 :

jQuery(this).prev("td").child("input[name=module]").val() != 'undefined' 

... 또는 이와 유사한

그리고 두 번째의 경우, 당신은 '하나를 선택 ...'무시 될 수있는 같은 이름의 빈 문자열 옵션을 추가해야하지만, 수

단일 선택이 선택되었을 때 당신의 행동은 발사됩니다.

+0

단일 선택 문제에 대한 또 다른 해결책이 있기를 바란다 더미 옵션 "Select one .."또는 이와 비슷한 것으로 – Rebse

+0

단일 선택 "선택"이 모순 인 것 같습니다 :) –

+0

제안을 시도하지 않았습니다. ,하지만 너무 고마워, 고마워 !! 로마에 몇 가지 방법이 있습니다. 성능 문제로 인해 일부 선택자를 선호해야한다는 것을 알고 있지만 jquery 전문가가되는 것이 아닙니다. – Rebse

관련 문제