2013-03-02 11 views
2

У меня есть следующий скрипт. Он работает, когда пользователи нажимают кнопку поиска, но работают только один раз. Пожалуйста, помогите мне, как я могу заставить его работать для большего количества кликов. Спасибо,JavaScript работает только один раз

<form action="" method="get" id="searchform"> 
    <input name="q" type="text" id="search" size="32" maxlength="128" class="txt"> 
    <input type="button" id="hit" value="Search" class="btn"> 
</form> 

<script type="text/javascript"> 
    var nexturl =""; 
    var lastid =""; 
    var param; 
    $(document).ready(function() { 
    $("#hit").on("click", function myFunction() { 
     param = $('#search').val(); 
     alert("I am an alert box!"); 
     if (param != "") { 
     $("#status").show(); 
     var u = 'https://graph.facebook.com/search/?callback=&limit=100&q='+param; 
     getResults(u); 
     } 

     $("#more").click(function() { 
     $("#status").show(); 
     $("#more").hide(); 
     pageTracker._trackPageview('/?q=/more'); 
     var u = nexturl; 
     getResults(u); 
     }); 
    }); 
    }); 
</script> 
+2

Возможный дубликат ... Я даже не собираюсь искать, на это так много ответов. –

+0

@AustinMullins: Я попытался связать его щелчком, но это решение dont сработало (я прочитал эти ответы). –

+2

работает все время здесь http://jsfiddle.net/VsHyP/ –

ответ

1

Я знаю, что это было до того много раз спрашивали, но здесь это:

$(document).on("click", "#hit", function() { 
    ... 
}); 

Вы должны позволить пузырек события до документа, чтобы изменения в DOM не уничтожить обработку событий.

Здесь он находится в a jsFiddle. Дайте мне знать, что вы видите.

+0

Я пробовал это. Даже это не работает :( –

+0

Я не уверен, что в этом случае требуется указать элемент контейнера, он не динамически добавляет к ним объекты в DOM и события привязки. –

+0

Я не понимаю, почему вы называете функцию в блок '.on'.Я не знаю, вызывает ли это какие-либо ошибки, но это имя получает каждый раз. –

1

Если вы на самом деле не представляя форму и просто работает JavaScript, вы должны запустить его как onsubmit на форме, а не так:

<form id="searchform" onsubmit='return submitForm()'> 
    <input name="q" type="text" id="search" size="32" maxlength="128" class="txt" > 
    <input type="button" id="hit" value="Search" class="btn"> 
</form> 

<script type="text/javascript"> 
    var nexturl =""; 

    function submitForm(){ 
    var lastid =""; 
    var param = $('#search').val(); 

    alert("I am an alert box!"); 
    if (param != "") { 
     $("#status").show(); 
     var u = 'https://graph.facebook.com/search/?callback=&limit=100&q='+param; 
     getResults(u); 
    } 

    //Prevents the form submitting 
    return false; 
    } 

    $("#more").click(function() { 
    $("#status").show(); 
    $("#more").hide(); 
    pageTracker._trackPageview('/?q=/more'); 
    var u = nexturl; 
    getResults(u); 
    }); 
</script> 

Имеет ли больше кнопки всегда существует или что-то это динамически добавляется/удаляется? Если это так, вам, вероятно, понадобится сделать что-то вроде

$("body").on("click", "#more", function() { 
    $("#status").show(); 
    $("#more").hide(); 
    pageTracker._trackPageview('/?q=/more'); 
    var u = nexturl; 
    getResults(u); 
}); 

вместо этого.

+0

Спасибо, что поняли, что это не так. Я не мог понять, где была ошибка. –

1

Он также работает во втором поиске. Элементы второго поиска просто добавляются в список результатов поиска, возможно, поэтому вы их не видите. Попробуйте $ ("# data"). Empty(); прежде чем вы начнете добавлять результаты нового поискового запроса.

Смежные вопросы