2013-04-29 4 views
1

나는 3 개의 변수 (textInput, type, rowID)를 가진 addText() 함수를 가지고있다. var 키워드없이 선언했기 때문에 함수 외부에서 사용할 수 있습니다. 그런 다음함수는 다른 함수의 변수를 어떻게 사용합니까?

<td><input type="checkbox" name="CB" id="monitor_'+rowID+'"/></td> 

내가 그 세 변수의 사용을 필요로이 기능이있다 :

function monitoring(rowID, number, type) { 
    var $check = $('#status_table #monitor_' + rowID); 
    $('#test').append($check); 
    if($check.is(':checked')) { 
     $.post('/request', { 
      inputText: number, 
      key_pressed: type 
     }).done(function (reply) { 
      if(reply == "on") { 
       $('#test').append("on"); 
      } else { 
       $('#test').append("off"); 
      } 
     }); 
    } 
    return; 
} 

이 기능은 여기에 호출됩니다 :

$('#status_table #monitor_'+rowID).each(function(rowID, textInput, type){ 
    monitoring(rowID, textInput, type); 
}); 
나는이 길을 만들어 많은 체크 박스가

참고 : inputText은 어딘가에 게시되는 변수입니다.

질문 :

  1. 이 변수 선택기를 호출하는 올바른 방법이 있나요?

    $('#status_table #monitor_'+rowID)

  2. 난 (선택기 기능 및 모니터링 기능 모두에서) 코드들의 제 2 세트에서 두 변수를 통과 하는가?

  3. 어떻게 변수를 올바르게 전달합니까?

  4. 선택기가 정확합니까? 또는 $('#status_table #monitor_'+rowID).each(function(){})$('#status_table tr').each(function(){})으로 변경해야합니까?

5. 추가 된 기능 : "모니터링"기능은 어디에 호출해야합니까? addText (아래 코드 참조) 아래에 넣었지만 "추가"단추를 클릭했을 때만 함수가 실행되기 때문에 의미가 없습니다. 또한, 내 선택기 변수로, 나는 그것이 실제로 확인 된 모든 확인란에 대해 동일한 일을 수행 할 수 있는지 확인하고 싶습니다. 내가 어떻게 할 수 있니?

확인란을 선택했을 때 시도했지만 내 코드가 전혀 응답하지 않습니다.

편집 :

다음

의 내 addText() 기능 (위와 같이이 함수 대신 다른 jQuery를 동작에서 내가 포함 한 기능 모니터링) :

function addText(add_type, fb_type) { 
    $("#" + add_type + "Add").click(function() { 
    $('.TextInput').empty(); 
    textInput = $("#" + fb_type + "TextInput").val(); 
    if(textInput.length === 0) { 
     alert('please enter the fieldname'); 
     return; 
    } 
    index = $('#status_table tbody tr').last().index() + 1; 
    type = $("#select-choice-1").find(":selected").text(); 
    rowID = type + textInput; 
    var str = '<tr id="' + rowID + '">' + '<td>' + index + '</td><td>' + rowID + 
     '</td><td class="type_row_' + textInput + '">' + type + '</td><td class="feedback number">' + 
     textInput + '</td>' + '<td><img src="static/OffLamp-icon.png" class="image" id="off"></td>' + 
     '<td><input type="checkbox" name="CB" id="monitor_' + rowID + 
     '" class="custom" data-mini="true" /><label for="CB"> </label></td><td class="outputRemove">x</td>' + 
     '</tr>'; 
    if(alreadyExist(textInput, type)) { 
     alert('Entry exists. Please enter another number.') 
    } else { 
     $('#status_table tr:last').after(str); 
    } 
    monitoring(rowID, textInput, type); 
    return; 
    }); 
} 

테이블의 HTML :

<table class="config" id="status_table"> 
    <thead> 
    <tr> 
     <th colspan="4" ; style="padding-bottom: 20px; color:#6666FF; text-align:left; font-size: 1.5em">Output Status</th> 
    </tr> 
    <tr> 
     <th>Index</th> 
     <th>Row ID</th> 
     <th>Feedback Type</th> 
     <th>Feedback Number</th> 
     <th>Status</th> 
     <th>Monitor?</th> 
     <th>Remove?</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr></tr> 
    </tbody> 
</table> 
+0

먼저 질문을 마무리 할 수 ​​있습니까? 당신이 틀린 이름을 가지고 있고, 물건을 빠뜨린 것처럼 보입니다. – Joseph

+0

어느 것을 의미합니까? 필요한 경우 세부 정보를 추가 할 수 있습니다. – yvonnezoe

+0

표의 HTML을 볼 수 있습니까? –

답변

1

몇 가지 문제가 있습니다. 우선,이 작동하지 않습니다

$('#status_table #monitor_'+rowID).each(function(rowID, textInput, type){ 
    monitoring(rowID, textInput, type); 
}); 

.each()에 전달 된 함수는 두 개의 매개 변수가 : 당신이 그들을 호출 할 수 있지만 당신이 원하는대로, indexInArrayvalueOfElement을 -이 경우, rowID 인덱스 및 textInput 것 요소의 값이됩니다. type은 전달 된 값이 없기 때문에 정의되지 않습니다.

두 번째로 ID 선택기를 호출 한 후 .each()을 사용하면 의미가 없습니다. ID 선택기는 ID가 고유해야하므로 대부분 하나의 요소 만 선택합니다. 당신이 .each()를 호출 할 때 rowID, textInputtype이 범위에있는

경우에, 당신은 모든 .each()를 필요로하지 않고 직접 monitoring를 호출 할 수 있습니다. 그러니 :

monitoring(rowID, textInput, type); 
+0

오, 정정 해줘서 고마워! 질문에 addText() 함수를 추가했고 테이블의 HTML을가집니다. 나머지 테이블은 머리말 일뿐입니다. 질문에 테이블의 해골을 추가했습니다 :) – yvonnezoe

+0

"범위"에서 무엇을합니까? 내 말은 "$ ('selector')를 넣을 수 있습니다. (rowID, textInput, type);"? – yvonnezoe

+0

@yvonnezoe "범위 내에 있음"은 코드를 실행할 때 변수가 표시됨을 의미합니다. 'var' 키워드를 사용하지 않고 변수를 선언했다면 전역 적으로 범위가 지정됩니다 (따라서 다른 변수에 의해 음영 처리되지 않는 한 코드의 어느 곳에서나 항상 유효합니다). jQuery 함수가 아니기 때문에'monitoring (rowID, textInput, type);'을 사용하면됩니다. –

1

이 변수 선택기를 호출하는 올바른 방법이 있나요?

셀렉터는 문자열입니다. 변수를 사용하여 문자열을 어셈블하는 것과 같이 변수를 사용하여 선택기를 어셈블합니다.

두 번째 코드 집합에서 변수를 두 번 전달해야합니까 (선택기 기능과 모니터링 기능 모두에서)?

변수가 어떤 범위에 있는지에 따라 다릅니다. 변수가 함수와 동일한 범위에 있으면 함수는 함수에 액세스 할 수 있습니다. 함수가 변수가있는 곳 밖에서 선언되면 함수에 전달해야합니다.

어떻게 변수를 올바르게 전달합니까? someFunction(theFoo,theBar,theOtherBar)

같은

호출시 인자로

는 선택이 정확합니까? 또는 $ ('# status_table #monitor _'+ rowID) .each (function() {})를 $ ('# status_table tr')로 변경해야합니까? each (function() {})?

ID는 페이지에서 고유해야하며 한 번만 존재합니다. 따라서 선택자 인 ID는 $('#monitor_[someID]')처럼 충분해야합니다. 하지만 그럴 경우 각 rowID에 대해 을 한 번에 하나씩 개로 가져 오는 것을 의미합니다. 대신 $('#status_table tr').each(function(){})을 사용하고 tr을 반복하면 더 좋습니다.

+0

설명 주셔서 감사합니다! :) 질문에 addText() 함수도 추가했습니다. – yvonnezoe

+0

하지만 내 경우에는 '모니터링'함수에서 액션을 수행하지 않기 때문에 선택기가 제대로 호출되는지 확인할 수 없습니다./위의 코드를 편집하여 addText 아래 함수를 포함 시켰습니다. 제발 좀보고 좀 도와주세요 :) 고마워요. – yvonnezoe

1
  1. 이 변수 선택기를 호출하는 올바른 방법이 있나요? $('#status_table #monitor_'+rowID)

    예. jQuery에 전달 된 선택자는 문자열이므로 변수를 문자열에 추가하면 그렇게 할 수 있습니다. 나는 그 요소 ID가 meant to be unique

  2. 내가 코드 (셀렉터 기능과 모니터링 기능 모두에서) 두 번째 세트에 두 번 변수를 전달해야 (링크 된 페이지의 목록에있는 항목이 봐)입니다주의 할 것이다?

    함수에 .each 함수가 반환하는 매개 변수가있는 경우에는 필요하지 않습니다. $('#status_table #monitor_'+rowID).each(monitoring);처럼 갈 수 있습니다.

    나는 .each 콜백의 인수 here 지정된 indexInArrayvalueOfElement을하고 다시 전달 인자로 rowID, number 또는 type가 발생하지 않는 것을 그러나주의 할 것이다.

  3. 어떻게 변수를 올바르게 전달합니까?

    무슨 뜻인지 모르겠다. 함수에 변수를 전달하는 것을 언급하고 있다면 제대로 수행하고 있습니다. 예. myAwesomeFunction(myFirstVariable, mySecondVariable)

  4. 선택기가 정확합니까? 또는 변경해야합니까 $('#status_table #monitor_'+rowID).each(function(){})$('#status_table tr').each(function(){})

    글쎄 정말 당신이 달성하려고하는 것에 따라 달라집니다. ID status_table의 요소 안에있는 'monitor_'+rowID에서 평가 된 ID를 가진 모든 요소를 ​​먼저 가져옵니다. ID가 status_table 인 요소 안에있는 두 번째 모든 것은 tr입니다. 그것은 당신이하려는 일에 달려 있습니다.

+0

설명해 주셔서 감사합니다. : D – yvonnezoe

+0

하지만 내 경우에는 함수 모니터링에서 작업을 수행하지 않기 때문에 선택기가 제대로 호출되는지 확인할 수 없습니다./위의 코드를 편집하여 addText에 함수를 포함 시켰습니다. – yvonnezoe

+0

Firebug, Chrome 개발자 콘솔 또는 IE8 +의 기본 제공 개발자 도구와 같은 도구를 사용하여 중단 점을 삽입하여 함수의 실행 상태를 확인하는 것이 유용합니다.솔직히 말해서, 나는 당신의 코드를 다시 살펴 보았고, 실제로 무엇을하고 있는지, 그리고 그것이 무엇을하는지 이해하지 못했습니다. 여러 다른 답변이 필요하기 때문에 이것이 Stack Overflow에 대한 유효한 질문인지 확실하지 않습니다. – Turnerj

관련 문제