.val并没有给我元素的价值

时间:2013-07-15 23:44:07

标签: jquery ajax api reddit

我正在使用reddit API。我的页面上有一个搜索框,我正在设置它,以便如果要输入任何内容,它将返回与他们键入的单词或短语相关的前10个新闻报道。

 <script>
    $(document).ready(function () {

       //reddit API URL
       //var URL =  "http://www.reddit.com/r/subreddits/search.json?q=Xbox";

       var SEARCH_URL = 'http://www.reddit.com/r/subreddits/search.json?jsonp=?';
       var searchQueryText = $('#search').val(); //getSearchQueryText();

       $.getJSON(SEARCH_URL, {
          q: searchQueryText,
          limit: 10
       }).done(function (data) {
           $.each(data.data.children, function (i, item) {
             $("<p>").text(item.data.title).appendTo("#images");
           });
       }).fail(function (data) {
           alert("Something went wrong");
       });

    }); //end ready
 </script>

<div id="images">
<h1>Reddit Data:</h1>

<p>
    <label>Search</label>
    <input type = "text" id = "search" value = "" />
</p>

如果我将var SearchQueryText更改为特定字,那么API工作正常。但是,因为我将其更改为$('#search').val();它不再有效。我放了alert()来测试值,弹出窗口是空白的。所以我认为问题是当我输入它时它没有检测到这个词。所以我写了一个简单的.mouseenter函数,但仍然没有。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

尝试附加keyup事件处理程序

当用户释放密钥时,这将触发。

$('#search').keyup(function() {
    console.log(this.value)
}).change();

如果你想在准备好的文件上发射相同文件,那么你可以在声明后链接事件。

$(document).ready(function () {

    $('#search').keyup(function () {
        //reddit API URL
        //var URL =  "http://www.reddit.com/r/subreddits/search.json?q=Xbox";

        var SEARCH_URL = 'http://www.reddit.com/r/subreddits/search.json?jsonp=?';
        var searchQueryText = this.value;  // or  $(this).val(()

        $.getJSON(SEARCH_URL, {
            q: searchQueryText,
            limit: 10
        }).done(function (data) {
            $.each(data.data.children, function (i, item) {
                $("<p>").text(item.data.title).appendTo("#images");

            });
        }).fail(function (data) {
            alert("Something went wrong");
        });
    }).keyup();
}); //end ready

答案 1 :(得分:0)

或者,您可以在用户按下回车键(即输入一些文本后)时触发事件,如下所示:

$(document).ready(function () {
  $('#search').keypress(function(e) {
     if(e.which == 13) {
       // Enter key pressed
       e.preventDefault();
       var SEARCH_URL = 'http://www.reddit.com/r/subreddits/search.json?jsonp=?';
       var searchQueryText = $('#search').val(); //getSearchQueryText();
       console.log(searchQueryText);

       $.getJSON(SEARCH_URL, {
          q: searchQueryText,
          limit: 10
       }).done(function (data) {
          $.each(data.data.children, function (i, item) {
          $("<p>").text(item.data.title).appendTo("#images");
          });
       }).fail(function (data) {
         alert("Something went wrong");
       });   
     }
  }); // End keypress handler
}); // End ready