2011-06-18 49 views
0

我需要在按鈕單擊頁面上添加新的幾個元素。 我不明白 - 當我用fireBug一步一步完成所有工作時 - 一切正常。如果我關閉Firebug - 沒有添加任何東西。 這是js代碼:

function Appending() 
{ 
    var id = document.getElementById("default-id").value; 
    id++; 
    var result = $.post("addForm.php",{idEl:id},"html"); 
    $('#vrWrapper').append(result.responseText); 
    document.getElementById("default-id").value = id; 
} 
function removeInput(id) { 
    $("#" + id).remove(); 
} 

這裏是PHP代碼(addForm.php):

<?php 
$id=$_POST["idEl"]; 
echo '<div class="data" id="'.$id.'"><div class ="userdata"><div class = "input"> <label for="lastName">Last Name:</label> <input id="lastName" type="text"/></div><div class = "input"> <label for="firstName">First Name:</label> <input id="firstName" type="text" /></div><div class = "input"> <label for="city">City:</label> <input id="city" type="text"/></div><div class = "input"> <label for="state">State:</label> <select name="state"><option value="AL">Alabama</option><option value="AK">Alaska</option><option value="AZ">Arizona</option><option value="AR">Arkansas</option><option value="CA">California</option><option value="CO">Colorado</option><option value="CT">Connecticut</option><option value="DE">Delaware</option><option value="DC">District of Columbia</option><option value="FL">Florida</option><option value="GA">Georgia</option><option value="HI">Hawaii</option><option value="ID">Idaho</option><option value="IL">Illinois</option><option value="IN">Indiana</option><option value="IA">Iowa</option><option value="KS">Kansas</option><option value="KY">Kentucky</option><option value="LA">Louisiana</option><option value="ME">Maine</option><option value="MD">Maryland</option><option value="MA">Massachusetts</option><option value="MI">Michigan</option><option value="MN">Minnesota</option><option value="MS">Mississippi</option><option value="MO">Missouri</option><option value="MT">Montana</option><option value="NE">Nebraska</option><option value="NV">Nevada</option><option value="NH">New Hampshire</option><option value="NJ">New Jersey</option><option value="NM">New Mexico</option><option value="NY">New York</option><option value="NC">North Carolina</option><option value="ND">North Dakota</option><option value="OH">Ohio</option><option value="OK">Oklahoma</option><option value="OR">Oregon</option><option value="PA">Pennsylvania</option><option value="RI">Rhode Island</option><option value="SC">South Carolina</option><option value="SD">South Dakota</option><option value="TN">Tennessee</option><option value="TX">Texas</option><option value="UT">Utah</option><option value="VT">Vermont</option><option value="VA">Virginia</option><option value="WA">Washington</option><option value="WV">West Virginia</option><option value="WI">Wisconsin</option><option value="WY">Wyoming</option></select></div></div><div class ="workdata"><div class = "input"><input id="ch1" type="checkbox" class="check" /><label for="ch1">Немирович (бригадир)</label></div><div class = "input"><input id="ch2" type="checkbox" class="check" /><label for="ch1">Немирович (бригадир)</label></div><div class = "input"><input id="ch3" type="checkbox" class="check" /><label for="ch1">Немирович (бригадир)</label></div><div class = "input"><input id="ch4" type="checkbox" class="check" /><label for="ch1">Немирович (бригадир)</label></div><div class = "input"><input id="ch1" type="checkbox" class="check" /><label for="ch1">Немирович (бригадир)</label></div></div><div class ="buttons"><button type="button" id="addAdult" onClick="Appending()">Add Adult</button><button type="button" id="register">Register</button><button type="button" id="cancel" onClick = "removeInput('.$id.')">Cancel</button></div></div>'; 
?> 

真是怪了,一切是正確的 - 螢火顯示沒有失誤

在這裏你可以看到它的行動:http://tvorchestva.net/test/form/form.html

+0

您正在發出一個* asynchronous *請求並期望它立即回來。閱讀「$ .post」文檔(http://api.jquery.com/jQuery.post/) –

+0

他有錯誤的js代碼,所以它不只是「等待」問題 – genesis

+0

謝謝大家非常感謝你的幫助! – Zakkery

回答

0

試試這個

function Appending() { 
    var id = document.getElementById("default-id").value; 
    id++; 
    $.post("addForm.php", { 
     idEl: id 
    }, function(html) { 
     $('#vrWrapper').append(html); 
    }); 

    document.getElementById("default-id").value = id; 
} 

function removeInput(id) { 
    $("#" + id).remove(); 
} 
4

將您的代碼回撥到post

function Appending() 
{ 
    var el = document.getElementById("default-id"); // cache the selection 
    var id = el.value; 
    id++; 
    el.value = id; 
    $.post("addForm.php",{idEl:id},function(htm) { 
     $('#vrWrapper').append(htm); // <-- run after response is received 
    },"html"); 
} 

你可以因爲Differeds的jQuery的較新版本使用不同的形式。

基於例如從文檔:

$.post("example.php", function() { 
     alert("success"); 
    }) 
    .success(function() { alert("second success"); }) 
    .error(function() { alert("error"); }) 
    .complete(function() { alert("complete"); }); 
+0

這一個工程。你能告訴我,什麼是錯的?有沒有任何方法可以在$ .post內創建函數而不使用響應? – Zakkery

+0

@Zakkery:不,沒有。你需要把它放在第三個參數中= function – genesis

+0

@Zakkery:'$ .post'請求是異步的,這意味着*之後的代碼不會等待響應在運行之前返回。這就是爲什麼你放置依賴於回調中的響應的任何代碼。避免回調的唯一方法是使請求*同步*,但您不想這樣做,因爲它鎖定瀏覽器直到響應返回。 – user113716

0

的問題是,$.post期待的功能,成功的第三個參數調用,但你傳遞的「HTML」。

嘗試

$.post("addForm.php", {idEl:id}, function(d) { 
    $('#vrWrapper').append(d); 
});); 

由於jQuery的文檔指出更換

$.post("addForm.php",{idEl:id},"html"); 

, 「大多數實現將指定一個成功的處理程序;」在他們的例子中,他們「獲取所請求的HTML代碼片段並將其插入到頁面上」,這正是您要做的。