2012-08-13 3 views
0

업데이트하려고하는 운송 모듈이 있습니다. 내 PHP 양식/테이블 각 줄 항목을 추가 할 수 싶습니다. 무슨 일이 일어나는지는 추가/삭제 행 버튼이 원하는대로 각 광고 항목에 표시되지만 첫 번째 광고 항목에만 영향을 미칩니다. 광고 항목 1에 행을 추가하면 행이 올바르게 추가됩니다. 그러나 광고 항목 2의 행을 추가하려고하면 실제로 광고 항목 1의 행이 추가됩니다. 광고 항목 3의 행을 추가하려고하면 항목 1에 대한 행이 다시 추가됩니다. 각 항목에 행을 추가 할 수 있기를 원합니다.Javascript는 PHP 변수에서 getElementById()를 정의합니까?

자바 스크립트 함수를 호출하는 PHP의 while 루프가 있습니다. 문제는 자바 스크립트에서 변수 중 하나에 ID가 필요하다는 것입니다. 내 루프를 통해 이동에도 불구하고 ID는 절대 변경되지 않으므로 내 자바 스크립트는 내 원하는 출력이 아닌 단일 루프에만 적용됩니다. 내가 자바 스크립트 내 ID를 포함하는 PHP에서 변수를받을 수 있다면 내 루프를 통해 각 패스를 실행하는 자바 스크립트를 얻을 수 있습니다 생각하고 있어요. 사전에

<?php 

$i=0; 
$n=1; 

while($i < $num1) { 

$SO_Line_Item=mysql_result($result1,$i,"SO_Line_Item"); 
$Cust_PN=mysql_result($result1,$i,"Cust_PN"); 
$Cust_PN_Rev=mysql_result($result1,$i,"Cust_PN_Rev"); 
$Description=mysql_result($result1,$i,"Description"); 
$SOItemQty=mysql_result($result1,$i,"Qty"); 
$UOM=mysql_result($result1,$i,"UOM"); 
$Program=mysql_result($result1,$i,"Program"); 
$Required_Date=mysql_result($result1,$i,"Required_Date"); 
$SOItemShipQty=mysql_result($result2,$i,"count(E9_SN)"); 

?> 
<tr> 
<td width="3px" valign="top" align="center"><?php 
echo "$SO_Line_Item";?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"><?php 
echo "$Cust_PN - $Cust_PN_Rev";?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"><?php 
echo "$Description";?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"> 
<?php 
echo "$SOItemQty";?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"> 
<?php 
echo "$UOM";?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"> 
<?php 
echo $SOItemQty - $SOItemShipQty;?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"> 
<input size="2" align="right" type="text" name="Qty"> 
</td> 
<td nowrap="nowrap" valign="top" align="center"> 
<?php 
echo "$Required_Date";?> 
</td> 
<td nowrap="nowrap" valign="top" align="center"> 
<?php 
echo "$Program";?> 
</td> 
</tr> 

//HERE IS WHERE THINGS GO SOUTH. I'd LIKE TO BE ABLE TO ADD A LINE FOR EACH PART 
//NUMBER... WHAT HAPPENS IS THIS IS ALWAYS RUN FOR THE SAME ID AND WHILE THE FORM 
//DISPLAYS PROPERLY THE ADD AND DELETE ALWAYS MODIFY THE FIRST PART 

<tr> 
<td colspan="10"> 
<p> 
<input type="button" value="Add" onclick="addRowToTable();" /> 
<input type="button" value="Remove" onclick="removeRowFromTable();" /> 
<!-- 
<input type="button" value="Submit" onclick="validateRow(this.form);" /> 
<input type="checkbox" id="chkValidate" /> Validate Submit 
--> 
<b><font color="RED">Add/Remove Box Number For This Line Item</font></b> 
</p> 
</td> 
</tr> 

<tr> 
<td></td> 
<td> 
<table id="tblSample"> 
<tr> 
    <td>1</td> 
    <td><input type="text" name="Box_Num[]" 
    id="Box_Num1" size="18" onkeypress="keyPressTest(event, this);" /></td> 

    </tr> 
</table> 
</td> 
</tr> 
<?php 



$i++; 
} 

감사 :

여기
<SCRIPT language="javascript"> 
     // Last updated 2006-02-21 
function addRowToTable() 
{ 
    var tbl = document.getElementById('tblSample'); 
    var lastRow = tbl.rows.length; 
    // if there's no header row in the table, then iteration = lastRow + 1 
    var iteration = lastRow + 1; 
    var row = tbl.insertRow(lastRow); 

    // Item cell 
    var cellLeft = row.insertCell(0); 
    var textNode = document.createTextNode(iteration); 
    cellLeft.appendChild(textNode); 

    // Cust PN cell 
    var cellBox_Num = row.insertCell(1); 
    var el = document.createElement('input'); 
    el.type = 'text'; 
    el.name = 'Box_Num[]'; 
    el.id = 'Box_Num' + iteration; 
    el.size = 18; 

    el.onkeypress = keyPressTest; 
    cellBox_Num.appendChild(el); 
} 
function keyPressTest(e, obj) 
{ 
    var validateChkb = document.getElementById('chkValidateOnKeyPress'); 
    if (validateChkb.checked) { 
    var displayObj = document.getElementById('spanOutput'); 
    var key; 
    if(window.event) { 
     key = window.event.keyCode; 
    } 
    else if(e.which) { 
     key = e.which; 
    } 
    var objId; 
    if (obj != null) { 
     objId = obj.id; 
    } else { 
     objId = this.id; 
    } 
    displayObj.innerHTML = objId + ' : ' + String.fromCharCode(key); 
    } 
} 
function removeRowFromTable() 
{ 
    var tbl = document.getElementById('tblSample'); 
    var lastRow = tbl.rows.length; 
    if (lastRow > 1) tbl.deleteRow(lastRow - 1); 
} 

    </SCRIPT> 

내 루프 :

여기 내 자바 스크립트입니다!

+0

다음 내용을 따르지 않습니다. PHP는 자바 스크립트 함수를 '호출'하지 않으며 그렇게 할 수도 없습니다. PHP를 사용하여 HTML에서 고유 한 ID를 생성 할 수 있는지 묻는다면 javascript에서 고유 한 ID를 사용하도록하는 것이 좋습니다. 그렇습니다. 매우 쉽습니다. 그냥 카운터 또는 PHP 루프에있는 모든 증분하고 id = "id_X"같은 ID에 증분 값을 추가하십시오. 여기서 X는 카운터 출력입니다. –

+0

당신이 옳습니다, 이것이 내가하려는 일입니다. 좀 더 구체적으로, 내 PHP에서 테이블 id = "tblSample"을 설정합니다. 예를 들어 자바 스크립트 함수에서 addrow()는 "var tbl = document.getElementById ('tblSample');"을 통해 id = "tblSample"을 찾습니다. 나는 당신이 "tblSample"을 변경하여 $ tblSample의 PHP 변수를 말하고 루프를 통과 할 때마다 증가하고 javascript를 "var tbl = document.getElementById ('$ tblSample'); " 또는 비슷한 것. "var tbl"조각이 function addRowToTable() 내에 있기 때문에 나는 이것이 어떻게 작동하는지 잘 몰랐습니다. 시간을내어 주셔서 감사합니다! – user1459766

+0

확인. 당신이 실제로하려고하는 것이 아직 불분명합니다. tblSample에 행을 추가/삭제하려고합니까, 아니면 중첩 된 큰 테이블입니까? –

답변

0

단순히 행 추가 및 삭제 자바 스크립트 함수에 테이블 ID를 전달하십시오. 이처럼되고 두 함수의 처음 몇 줄을 변경할 수 있습니다 :

function addRowToTable(tableID) 
{ 
    var tbl = document.getElementById('tblSample_' + tableID); 
    ... 
} 

또한이

<input type="button" value="Add" onclick="addRowToTable('<?php echo $i; ?>');" /> 
<input type="button" value="Remove" onclick="removeRowFromTable('<?php echo $i; ?>');" /> 

같은 자바 스크립트 함수 테이블 카운터 값을 전달하고 추가 할 PHP 카운터를 사용합니다 테이블 ID의 카운터가 이렇게됩니다.

<table id="tblSample_<?php echo $i; ?>"> 
+0

매력처럼 작동했습니다. 시간과 인내심에 감사드립니다! – user1459766

관련 문제