2014-01-15 52 views
-1

我想要一個搜索輸入字段顯示相應的稅從JSON形式。但現在我很無能。任何想法都表示讚賞。 http://jsfiddle.net/9jFGG/Ajax與jQuery的搜索json

var jsonUrl = "https://dl.dropboxusercontent.com/u/430406/Temp %5Bok to delete%5D/Various/salaryCalc/7100.json"; 

var inputValue = $('input[name=income]'); 

$('#input-form').keyup(function() { 
$.getJSON(jsonUrl, function (data) { 
    $.each(data, function (key, val) { 
    if (inputValue.val() === key) { 
     $('#tax-calc').text(val); 
    } 
    }); 
}); 
}); 
+0

你一定可以通過查看瀏覽器的發現一些小的語法錯誤JS控制檯或使用諸如JSLint或JSHint的工具。 – Quentin

+0

如果其中一個答案錯誤地發生,請將其標記爲解決方案 – Christian

+0

固定的拼寫錯誤。標記解決方案 – Andreas

回答

1

你有幾個錯別字

看到jsfiddle

$('#input-form').keyup(function() { 
    $.getJSON(jsonUrl, function (data) { 
     $.each (data, function (key, val) { 
      if (inputValue.val() == key) { 
       $('#tax-calc').text(val.tax); 
       $('#paid-calc').text(val.income - val.tax); 
       return; 
       } 
      }) 
    }) 
}); 
0

你已經錯過了很多括號。

我已經更改了您的完整代碼並添加了新功能。這一個現在等待500毫秒,直到它觸發JSON調用。這很重要,否則每次用戶輸入一個字母時都會發送JSON請求。這將是對性能方面非常壞..

而且我已經爲你添加一些評論;)

//this one waits until the dom is loaded 
$(function(){ 

var inputValue = $('input[name=income]'); 

//creates a new constructor function that handles the actual call and wait-time 
var JSONSender = function(){ 
    //saves the timeout id to clear it if necessary 
    var timeoutId = null, 
     jsonUrl = "https://dl.dropboxusercontent.com/u/430406/Temp %5Bok to delete%5D/Various/salaryCalc/7100.json"; 

    this.getJSON = function(_callback){ 
     //if a setTimeout is already in progress, cancel it 
     if(timeoutId !== null){ 
      clearTimeout(timeoutId); 
     } 
     //fire the actual code after 500 ms 
     timeoutId = setTimeout(function(){ 
      timeoutId = null; 
      $.getJSON(jsonUrl, _callback); 
     },500); 
    } 
}; 

    var jsonSender = new JSONSender(); 

    $('#input-form').keyup(function(e) { 
    jsonSender.getJSON(function(data){ 
     $.each (data, function (key, val) { 
      if (inputValue.val() == val.income){ 
       $('#tax-calc').text(val.tax); 
       return; 
      } 
     }); 
     }) 
    }); 
});