2015-03-01 4 views
1

Я настраиваю свою разбивку на страницы, но поскольку разбиение на страницы только делает запрос GET, я планирую сделать это, чтобы сделать запрос AJAX Post, делая это, потому что может быть несколько разбиений на страницы на одной странице.JQuery передать имя функции переменной и вызвать ее

$(document).ready(function() 
    { 
     $(document).on('click', '.pagination a', function(e) 
     { 
      e.preventDefault(); 

      var page = $(this).attr('href').split('page')[1]; 
      var function_name = $(this).parent().closest('div').attr('data-function-name'); 
    }); 

Я планирую вызвать существующую функцию с помощью function_name затем добавьте страницу в качестве параметра перевале значением для этой функции

позволяет говорить

function fetch_records(page) 
{ 
    //do something here 
} 


function fetch_notes(page) 
{ 
    //do something here 
} 

Любой человек может показать мне, как это делается без использования EVAL? Благодарю.

UPDATE

  <div id="div_paginate" class="col-sm-6" style="display:block;" data-function-name="fetch_records"> 
       <div id="div_possible_duplicate_paginate" class="pull-right"></div> 
      </div> 

То, что я имею в виду, чтобы сделать то, что, для каждого постраничной DIV, я буду иметь этот атрибут данных, где оно будет содержать имя функции он должен позвонить.

+0

Внутри обработчика щелчка вы просто передать аргумент, как в ' fetch_records (страница); ' – adeneo

+0

Я не хочу настраивать разбиение на страницы, созданные se rver, потому что каждый раз, когда я запускаю обновление для композитора, вся настройка, которую я сделал, теряется. Поэтому я решил сделать это вместо этого. – Ponce

+0

Какова ценность имени функции данных? Являются ли эти определенные серверные стороны? – lshettyl

ответ

2

Вы можете создать модуль, который будет содержать все методы AJAX и вызывать специальные методы из этого контейнера на основе вашего data-function-name. Что-то вроде этого:

Тест HTML:

<div id="div_paginate" data-function-name="fetch_records" class="grid"> 
    Records.. 
</div> 

<div id="div_paginate" data-function-name="fetch_notes" class="grid"> 
    Notes.. 
</div> 

JS:

// Module that contains your particular methods 
var FuncsModule = (function(){ 
    var fetch_records = function(page) 
    { 
     alert('fetching records ' + page + '..'); 
    } 
    var fetch_notes = function(page) 
    { 
     alert('fetching notes ' + page + '..'); 
    } 
    return { 
     fetch_records: fetch_records, 
     fetch_notes: fetch_notes 
    } 
})(); 

// Implementation 
$(document).ready(function() { 
    $(document).on('click', '.grid', function(e){         
     var action = ($(this).attr('data-function-name')), 
      page = Math.floor((Math.random() * 10) + 1); // some random number for tests 
     if (typeof(action) !== 'undefined'){ 
      FuncsModule[action].call(this, page); 
     } 
    }); 
}); 

jsfiddle:

http://jsfiddle.net/avup23cg/

+0

Я все еще пытаюсь понять, как я могу добавить этот код в свой код. Я получаю эту ошибку: TypeError: funcModule [fetchRecord] не определено \t funcModule [fetchRecord] .call (this, page); – Ponce

+0

@ Понсе, пожалуйста, у вас есть jsfiddle, чтобы я мог посмотреть на точный код? –

+0

http://jsfiddle.net/ntyu7ha9/ – Ponce