2012-05-24 3 views
1

이것은 약간 복잡하기 때문에이 단어를 올바르게 입력하십시오.Ajax, 동적 입력 필드 및 정적 입력 필드로로드 된 양식 입력 필드의 값을 가져옵니다.

나는 옵션의 목록을로드하고 하나 개의 정적 입력을 시작하는 형태를 갖는다 :

: 페이지 같은 목록에 속한 아약스 통화 표시 추가 입력 필드를로드

<span id="keyword_list_out" class="input"><input class="keys margin-bottom" type="text" name="keywords[]" /> 

<span class="field-wrapper"><input class="keys" type="text" name="keywords[]" value="Option One" /><a class="remove-keyword" href="javascript:void(0);"><img src="images/icons/cross-button-icon.png" /></a></span> 
<span class="field-wrapper"><input class="keys" type="text" name="keywords[]" value="Option Two" /><a class="remove-keyword" href="javascript:void(0);"><img src="images/icons/cross-button-icon.png" /></a></span> 

이 옵션은 첫 번째 정적 입력 필드 ID : keyword_list_out의 맨 앞에 추가됩니다.

사용자는 동적으로 더 많은 입력 필드를 추가 할 수 있으며 기존 필드를 제거 할 수 있습니다.

이 모든 것은 지금까지 정상적으로 작동합니다. 내 문제는 입력 필드에 포함 된 데이터에 액세스하는 것입니다. 사용자가 옵션을 제거했습니다

  1. 경우 나 사용자가 내가 삽입해야하는 필드를 추가 한 경우 데이터베이스
  2. 에서이를 제거해야합니다 양식이 제출되면 나는 세 가지 기능을 수행 할 수 있어야합니다 데이터베이스는 사용자가 I 데이터베이스에이 업데이트해야 기존의 필드 값을 변경하면
  3. 에이

I 입력 이름 'KEYWORD_NAME []를 사용하여 입력 필드 내의 데이터를 액세스 할 그러면 배열을 반복 할 수 있습니다.

그러나 특정 ID 번호가있는 기존 옵션은 다루지 않습니다. Ajax 호출에서로드 된 필드에 ID 번호를 할당 할 수 있지만 정적 필드와 사용자가 추가 한 필드에는 ID 번호가 없으므로 필요하지 않습니다. 이 필드는 단순히 데이터베이스에 삽입됩니다.

그래서 내 질문은 내가 데이터베이스에있는 ID 번호에 속하는 기존 옵션을 결정하는 방법에 관한 것이라고 생각합니다. 옵션에 고유 한 이름이 붙지 않는다고 덧붙여 야합니다. 각 입력을 통해 루프를 입력하고 구분을 사용자를 사용하여 이름 값 끝에 ID를 앞에 추가하면 아약스로드 필드

  • 을 위해 ID 번호를 제공

    1. :

      는 뭔가 같은 고려 제공하지 않을 것입니다. IE : Option Two --- 1
    2. PHP가 배열을 반복하면서 '---'와 일치하는 배열 값을 폭발 시킴
    3. '---'에서 일치하는 것이 발견되면 데이터베이스를 업데이트하고, 그렇지 않으면 데이터베이스에

    어떤 생각?

    I 두 어레이에있는 입력 필드에 분할 한

    UPDATE : existing_options [] 및 new_options [].내 JQuery와 스크립트에서

    이전에 내가 추가 한 게시에 :

    var existing_options = $('input[name=existing_options]').attr('value'); 
    var new_options = $('input[name=new_options]').attr('value'); 
    

    아약스 데이터가 전송되는 :

    'existing_options[]=' + existing_options + '&new_options[]=' + new_options; 
    

    그러나 PHP는이 값이 문자열이 아닌 배열 것을 반환합니다. 여기에 뭔가가 누락되었습니다 ....

  • 답변

    1

    데이터베이스 측면에서 자동 증가 ID를 사용하는 것이 좋습니다. 페이지를로드 할 때 사용 삭제할 때 ID가 너무 <span class="field-wrapper" id="$row[id]"> 추천하고보다 놓여있다 :

    $('.remove-keyword').on('click', function(){ 
        var id = $(this).parents('span').attr('id'); 
        place ajax post here with data sent being this id. 
    }); 
    

    을 그리고 기본적으로는 스크립트에 게시 사용 아약스 제외 키워드를 추가하는 같은 수 있습니다 및 사용 mysql_insert_id();을 스크립트에서 반환하는 ID로 사용하면 동적으로 다음 행을 만들 수 있습니다.

    +2

    .live()'은 (는) 사용되지 않습니다. '.on() '사용 – ahren

    +0

    당신의 도움에 감사드립니다. 필자는 사용자가 입력 필드를 제거 할 때 데이터베이스에서 동시에 제거된다는 점에서 제안한 것을 수행했습니다. 데이터베이스에는 ID 필드에 auto_increment가 있지만, 동시에 삽입 및 업데이트를 수행하고 있습니다. –

    +0

    MySQL을 사용하는 경우 phpMyAdmin과 같은 것을 사용하여 자동 증분을 사용하도록 id 필드를 설정할 수 있습니다. 또한 서버 쪽 스크립트에서 성공 또는 오류를 설정하여 오류가 발생하여 데이터베이스에서 삭제되지 않는 경우 페이지에서 삭제되지 않도록하는 것이 좋습니다. – Bobby

    1

    필드가 AJAX를 통해로드 할 때 그들에게 부여 ID를

    <input class="keys" type="text" id="keyword_11" name="keywords[]" value="Option Two" /> 
    <input class="keys" type="text" id="keyword_12" name="keywords[]" value="Option Two" /> 
    

    에 JQuery와에 다음을 클릭 제출할 할 수 있습니다 키워드를 통해 루프

    var new_keywords=Array(); 
    var existing_keywords=Array(); 
    $("input[name^='keywords']").each(function(){ 
        var id = $(this).attr("id"); 
        var val=$(this).val(); 
        if(id=="" && val!="") 
        { 
        new_keywords.push($(this).val()); 
        } 
        else if(id!="") 
        { 
        var keyword_id=id.split("_")[1]; 
        existing_keywords.push({"id":keyword_id,"val":val}); 
        } 
    }); 
    
    // call AjAX function add new_keywords to database 
    // call Ajax function to update existing keywords 
    

    UPDATE 1

    에서 데이터베이스에 new_keywords를 추가하는 성공 함수는 AJAX를 통해 기존 DOM을 업데이트하므로 새 키워드를 추가하면 편집 할 수 있습니다. 저장하려고하면 ID가 연결됩니다.

    +0

    도움 주셔서 감사합니다. 필자가 현재 작성한 스크립트에 제안한 내용 중 일부를 추가했습니다. –

    관련 문제