2011-08-02 33 views
1

我最近得知,在使用onclick時,對於按鈕,字段名稱和按鈕ID必須是唯一的。雖然這不是問題,但取決於腳本輸出的行數,這可能會造成很大的浪費。for循環中的PHP頁面上使用的jquery/Ajax

例如,我有一個while循環,它這樣做的每個人我的服務器(我的世界),所以它可能是10,也可能是50

這是創建JS對象的代碼

$kickbtn .= " $('#kick_btn$k').click(function(event) { 
    var player_name$k = jQuery('input[name=\"player$k\"]').val() 
    jQuery.get('testing.php?action=kick', { player_input: player_name$k}); 
    alert('Successfully kicked'); 
    });\n\n"; 

這是形式的數據

<form name=\"$pdata[name]\" action=\"\"> 
     <input type=\"hidden\" name=\"player$k\" value=\"$pdata[name]\"> 
     <input type=\"submit\" id=\"kick_btn$k\" value=\"Kick Player\"> 
    </form> 
    $k++; 

有沒有做到這一點,而無需創建所有這些多餘的代碼更簡單的方法?

html中的輸出效果很好,它確實有效,只是希望我能做些更動態的事情,而不是在代碼中混亂。下面是從解析的代碼,工作和看起來不錯。

$('#kick_btn14').click(function(event) { 

    var player_name14 = jQuery('input[name="player14"]').val() 

    jQuery.get('testing.php?action=kick', { player_input: player_name14}); 

    alert('Successfully kicked'); 

    }); 

回答

3

只需要一個委託的事件處理程序,這意味着它連接到一個父/容器元素,除非你想50+您的文檔中點擊處理這將不必要地慢下來:

// bind to all elements starting with 'kick_btn' within #container 
// (could even be 'body') 
$("#container").delegate('[id^="kick_btn"]', "click", function(event) { 

    // get the current player number from the id of the clicked button 
    var num = this.id.replace("kick_btn", ""); 
    var player_name = jQuery('input[name="player' + num + '"]').val(); 
    jQuery.get('testing.php?action=kick', { 
     player_input: player_name + num 
    }); 
    alert('Successfully kicked'); 
}); 

參考:

+0

儘管從縮小的文檔大小可以稍微減少加載時間,但值得一提的是,儘管完全合理,但這種方法可能會導致客戶端上的加載時間整體增加,與元素數量成正比該文件。 OP的原始方法並不美觀,但它需要較少的處理。 – tomfumb

+0

@tomfumb - 我會調整答案,甚至沒有考慮點擊處理程序的數量(感謝指針)。 – karim79

+0

var num = this.id.replace(「kick_btn」,「」);我認爲這條線有什麼問題,num總是沒有返回 – Kelso