2015-04-07 4 views
1

У меня есть список в HTML, который выглядит какOnClick работает только после второго щелчка

<a onclick="open_file()" id="3.txt">3.txt</a> 

Моя open_file() функция ищет эту

function open_file() { 
    $("a").click(function (event) { 
     var file_name = event.target.id; 
     $("#f_name").val(file_name); 
     $.ajax({ 
      url: "docs/" + file_name, 
      dataType: "text", 
      success: function (data) { 
       $("#text_form").val(data); 
       $('#text_form').removeAttr('readonly'); 
       $('#delete_button').removeAttr('disabled'); 
       $('#save_button').removeAttr('disabled'); 
      } 
     }) 
    }); 
} 

Проблема заключается функция, наконец, загружает данные во всех областях (text_form и f_name) только после двух кликов по такой ссылке. Он работает, даже если я сначала нажимаю на один файл, затем нажимаю на другой, и он загружается. Есть ли способ исправить это?

+0

Первый щелчок запускает 'open_file()'. Последующие клики запускают обработчик кликов на место с помощью 'open_file()'. –

+0

Нам нужно увидеть ваш HTML, чтобы найти правильный способ его исправить. то есть «# text_form',' # delete_button', '# save_button' и т. д. Также помните, что вы делаете AJAX-вызовы (т.е. асинхронные), поэтому вы должны ждать ответа сервера и обрабатывать его соответственно ... – ochi

ответ

3

Что вы сейчас делаете, добавив событие OnClick в ссылку, которая вызывает функцию , что добавляет еще одно событие OnClick с помощью JQuery.

Удалите свойство onclick и оболочку функции open_file(), чтобы jQuery добавила событие, как вы планировали.

+0

I' изменил мой код в соответствии с вашими советами, и теперь отладчик Chrome просто говорит, что «$ не определено» в этой строке «$ (« a »). click (function (event)» –

+0

Я предполагаю, что вы не загрузили jQuery, когда страница была загружена. Подробнее об этом см. в [их документации] (http://learn.jquery.com/using-jquery-core/document-ready/). –

+1

Итак, я должен окружить слушателя событий «$ (document) .ready (function() {"? –

1

Вам не нужно onclick="open_file()" это:

<div id='linkstofiles'> 
    <a id="3.txt">3.txt</a> 
    //other links go here 
</div> 

$("#linkstofiles a").click(function (event) { 
    var file_name = event.target.id; 
    $("#f_name").val(file_name); 
    $.ajax({ 
     url: "docs/" + file_name, 
     dataType: "text", 
     success: function (data) { 
      $("#text_form").val(data); 
      $('#text_form').removeAttr('readonly'); 
      $('#delete_button').removeAttr('disabled'); 
      $('#save_button').removeAttr('disabled'); 
     } 
    }) 
}); 
0

Вам не нужно связывать событие click снова в функции, если у вас есть onclick в вашем html.

Также для $ is not defined вам необходимо разместить библиотеку jquery в голове.

+0

Может возникнуть проблема, потому что я включил jquery-файл после включения моего JS-файла в HTML-страницу? –

+1

Да, сначала нужно поместить файл jquery, а затем файл. – latestbot

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