2013-06-26 1 views
0

아마도 최악의 질문 일지 모르지만 그 밖의 구문을 어떻게 알지는 못합니다.jQuery tag-it을 사용하여 PHP, mysqli, json으로 2 개의 다른 필드에 2 개의 변수를 반환 할 것입니다.

기본적으로 jQuery tag-it을 제 코드에 구현했습니다. 그러나 필자는 다른 사용자가 제공 한 솔루션을 사용하고 있습니다. 원하는 데이터를 가져 와서 필요한 입력으로 덤프하는 한 작동합니다.

내가있어 솔루션

따라서이다 :

jQuery를 :

$(document).ready(function(){ 
var availableTags = <?php include("ajax-search.php"); $english = search();?>; 
$("#livesearch").tagit({ 
    autocomplete: { 
     source: availableTags 
    } 
}); 
}); 

PHP/MySQLi :

function search() { 
include("dbconnect.php"); //Including our DB Connection file 
$sql = "SELECT * FROM animals"; 
$query = mysqli_query($db, $sql); 

while ($result = mysqli_fetch_assoc($query)){ 
    $english[] = $result['eng_names']; 
} 
echo json_encode($english); 
} 

은 기본적으로 내가 3 개 변수를 반환합니다. 영어, 라틴어 및 상태.

그래서, 전제는 이것이다 :

Status = English == Latin 

그래서 상태에서 나는 그러나 어떤 동물이 목록의에없는 등, 야생에서 멸종, 멸종 위기, 멸종 있습니다. 이 동물들은 공통적 일 수 있으므로 특수 라벨이 필요하지 않지만 모두 라틴어 이름이 필요합니다.

사용자가 '멸종'을 입력하면 죽은 동물의 목록이 나타납니다.

왜 태그를 사용합니까? 그들이 보고서이기 때문입니다. 사용자는 보고서를 작성하고 관련 보고서를 표시합니다. 동물의 이름 (라틴어 및 영어)은 반환해야하지만 상태는 반환하지 않아야합니다.

json이 어떻게이 작업을 수행 할 수 있는지 이해합니다. 필드를 상태 열에 텍스트가 없으면 무시하십시오. 그러나 mysqli 검색에서 반환하는 방법을 모르겠습니다. 나는 방법은 .MAP 생각()하지만 난() (검색 기능 바꿈을 .MAP 사용할 때마다 모든 생물을 나열하지만, ​​당신이 검색을 깔때기하지 않는 입력하면 같이

편집 :. .

기쁨 그래서, 나는에 대해 혼란스러워했다 두 개의 매개 변수와 일치하는 방법을 알아 내기 위해 관리

을 내가 원래 jQuery를 수정하여 이런 짓을 :. 내가 추가 한 HTML에 다음

<script> 
$(document).ready(function(){ 
$("#livesearch").tagit({ 
    autocomplete: { 
     source: 'ajax-search.php', 
     minLength:1 
    } 
    }); 
    }); 
</script> 

을 게시 방법 :

<form method="post"> 
    <input name="tags" id="latin" size="100%" disabled="true"> 
    <ul id="livesearch"></ul> 
    <input type="submit" value="Submit" />     
</form> 

는하지만 검색은 모든 PHP/MySQLi 쿼리에 일어난 :

if (!isset($_REQUEST['term'])) 
exit; 

$keyword = trim($_REQUEST['term']); 
$keyword = mysqli_real_escape_string($db, $keyword); 
$query = "SELECT * FROM animals WHERE english LIKE '%$keyword%' OR status LIKE '%$keyword%'";  
$result = mysqli_query($db, $query); //Run the Query 
$data = array(); 

if ($result && mysqli_num_rows($result)){ 
    while($row = mysqli_fetch_assoc($result)){ 
    $data[] = array(
    'label' => $row['english'], 
    'value' => $row['english'], 
    'latin' => $row['latin'] 
    ); 
    } 
} 
echo json_encode($data); 
flush(); 

을 그래서, 상태 (멸종, 멸종 위기에 처한 등) 올바른 동물을 반환를 검색합니다.

아이디어/코드는 these guys입니다.

그래서 저는 지금 두 개의 다른 분야에서 라틴어와 영어를 보여줄 필요가있는 부분에 붙어 있습니다. 그러나 나는 tag-it.js 소스를 무언가로해야한다는 것을 알았습니다. 나는 그것을 알아 내야한다.

편집 2 :

좋아, 나는이 두 개의 서로 다른 텍스트 필드에 두 개의 서로 다른 결과를두고 작업 할 수있었습니다. 그러나 태그 입력을 닫지는 않습니다.

다음은 수정 된 jQuery의 :

$("#livesearch").tagit({ 
    autocomplete: { 
     source: "ajax-search.php", 
     select: function(evt, ui){ 
      this.form.latin.value = ui.item.latin; 
     } 
    } 
}); 

그것은 라틴어 텍스트 입력에 라틴어를 박았에서 작동합니다. 그러나 이제는 이전처럼 입력을 깔끔한 작은 태그로 감싸지 않습니다.

편집 3 나는 지금까지 내가 할 수있는,하지만 소용 여부에 갔어요

.

// Autocomplete. 
    if (this.options.availableTags || this.options.tagSource || this.options.autocomplete.source) { 
     var autocompleteOptions = { 
      select: function(event, ui) { 
       that.createTag(ui.item.value); 
       that.createTag(ui.item.latin); //custon input? 
       // Preventing the tag input to be updated with the chosen value. 
       return false; 
      } 
     }; 
     $.extend(autocompleteOptions, this.options.autocomplete); 

않는 모든 그러나,의 정규 영어 이름을 모두 추가 할 수 있습니다 :

는 기본적으로 나는 같은 자동 완성 필드를 확장하여 태그 it.js 자체에 변수 호출을 추가 한 동물 동시에 동물의 라틴어 이름. 그 다음에 영어 이름을 삭제할 수는 있지만 너무 길어집니다.

나는 작동하는 것처럼 보이는 this.form.latin.value = ui.item.latin;을 사용해 보았습니다. 그러나 여러 개의 태그를 추가하거나 하나를 삭제하면 전체 코드가 손상됩니다. 일방적 인 것으로 보이므로 좋은 해결책은 아닙니다.

+0

질문을 간소화하려고하면 더 많은 답변을 얻을 수 있습니다. 귀하가 적극적으로 해결하려고 노력하는 것은 대단한 일이지만, 귀하의 질문은 현재 사람들이 당신이 요구하는 것을 말하기 전에 몇 페이지의 정보를 읽어야한다는 것을 요구합니다. –

+0

@SamDufel 새로운 질문을하겠습니다. 새로운 질문은 이제 간단합니다. '2 개의 다른 결과가있는 2 개의 필드에 tagit을 어떻게 출력합니까?' 내가 이것을 묻기 시작했을 때 나는 정말로 붙어 있었지만, 나는 원래의 질문 대부분을 풀었다. – deathtap

답변

0

다른 입력을 편집 가능하게 만들기로했습니다. 최적의 솔루션은 아니지만 당분간해야 할 것입니다. 이것을 업데이트하여 Tag-It 코드와 비슷한 기능을 필요로하는 다른 사람들을 위키로 만들 것입니다.