2015-04-10 2 views
0

У меня есть несколько просмотров, содержащих этот же javascript.Перемещение javascript из представления в файл javascript

<script type="text/javascript"> 
    $(function() { 
    $("#addAnother").click(function() { 
     $.get('/QuestionGroup/QuestionEntryRow', function (template) { 
      $("#questionEditor").append(template); 
     }); 
    }); 
}); 
</script> 

Я решил переместить эту логику в файл javascript. Итак, вот что я сделал.

По моему мнению, я добавил данные-attr.

 <a method="get" action="@Url.Action("QuestionEntryRow", "QuestionGroup")" href="#">Add another</a> 

В файле javascript я добавил следующий код.

var insertRow = function() { 
     var $a = $(this); 

     var options = { 
      url: $a.attr("action"), 
      type: $a.attr("method") 
     }; 

     $.ajax(options).done(function (data) { 
      var $target = $($a.attr("data-cban-target")); 
      $target.append(data); 
     }); 

     return false 
    }; 

    $("a[data-cban-a]").click(insertRow); 

Когда пользователь нажимает на ссылку «Добавить еще». Javascript не выполняется.

Target

<ul data-cureurban-target="questionEditor" style="list-style-type: none"> 
</ul> 

Здесь контроллер логики

public ActionResult QuestionEntryRow() 
{ 
    ViewBag.QuestionID = new SelectList(db.Questions, "QuestionID", "QuestionDesc"); 

    return PartialView("_QuestionEntryEditor"); 
} 
+0

Если Javascript справочного файла находится в заголовке документа, который вы пытаетесь присвоить обработчик щелчка перед тем существует 'a' элемент. –

+0

Как сделать этот документ готовым – RThompson

+0

'$ (function() {});' _is_ обработчик документа. – Jasen

ответ

0

Попробуйте следующее за файл .js:

var insertRow = function() { 
    var $a = $(this); 

    var options = { 
     url: $a.attr("action"), 
     type: $a.attr("method") 
    }; 

    $.ajax(options).done(function (data) { 
     var $target = $($a.attr("data-cban-target")); 
     $target.append(data); 
    }); 

    return false 
}; 

$(document).ready(){ 
    $("a[data-cban-a]").click(insertRow); 
} 
+0

Спасибо Jon P. Это все еще не работает. Я изменил представление, чтобы использовать эту логику RThompson

+0

@RThompson is that selector correct '$("a[data-cban-a]")'? Does it match anything on the page? – Jasen

+0

Can you provide more info other than "not working"? Any error messages etc? What debugging have you performed? Based on Jasens' comment you are missing the 'action' and 'method' attributes. Where are you expecting them to come from. –

0

Попробуйте добавить javascript:void(0) в HREF анкерного тега.

<a method="get" action="@Url.Action("QuestionEntryRow", "QuestionGroup")" href="javascript:void(0)">Add another</a> 

См этого stackoverflow поста для более подробной информации

+0

Когда я нажимаю ссылку «Добавить еще», ничего не происходит. Когда я накладываю курсор на ссылку, я вижу «javascript: void (0)». – RThompson

+0

Я внесла следующие изменения. Сначала я изменил вид на этот Add another. Затем я изменяю .js на этот $ ("a [data-cureurban-ajax = 'true']"). Click (insertRow). При нажатии ничего не происходит. – RThompson

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