2013-11-08 6 views
0

Я пытаюсь динамически вставлять функцию jQuery в элемент. Я делаю это динамически, потому что параметры функции могут меняться.Вставка функции jQuery с динамическими значениями параметров

Как вы можете видеть values, min, max свойства, а также параметры функции, присоединенные к событию stop и slide являются динамическими. Поэтому я думал, что я бы ввел всю функцию динамически, в настоящее время я вставляю ее как строку, которая, очевидно, просто вставляет текст и не работает код.

$.ajax({ 
     type: "GET", 
     url: "/service.svc/getshopitems/?newurl=" + parseCorrectURL(newURL), 
     data: "", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 

//here I'm setting all variables that are used as values in the function to be inserted 

$('.left_nav').append('$(function() {$("#slider_pricefilter").slider({range: true,values: [' + pricemin_query + ', ' + pricemax_query + '],min:' + pricemin + ',max: ' + pricemax 
    + ',stop: function(event, ui){updateResults("price",ui.values[0]+"-"+ui.values[1]);},slide: function (event, ui) {$("#amount").val("' + currencySign + '"+ui.values[0] + " - ' + currencySign + '" + ui.values[1]);}});$("#amount").val("' + currencySign + '"+$("#slider_pricefilter").slider("values", 0) + " - ' + currencySign + '" + $("#slider_pricefilter").slider("values", 1));});');   

     } 
    });   

Это фактическая функция, которая должна быть вставлена:

$(function() { 
    $("#slider_pricefilter").slider({ 
     range: true, 
     values: [12, 24], 
     min: 12, 
     max: 24, 
     stop: function (event, ui) { 
      updateResults("price", ui.values[0] + "-" + ui.values[1]); 
     }, 
     slide: function (event, ui) { 
      $("#amount").val("€" + ui.values[0] + " - €" + ui.values[1]); 
     } 
    }); 
    $("#amount").val("€" + $("#slider_pricefilter").slider("values", 0) + " - €" + $("#slider_pricefilter").slider("values", 1)); 
}); 

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

+0

почему бы не использовать словарь вариантов, где вы будете использовать значение внутри функции, только если они установлены, так же, как функция слайда делает – Surender

+0

Это звучит как проблема XY. Не могли бы вы предоставить подробную информацию обо всем своем коде, в том числе о том, как это происходит, и где извлекаются переменные. Динамическая вставка кода на страницу почти никогда не является правильным решением. –

+0

@RoryMcCrossan код вызывается в запросе AJAX, я обновил сообщение. Трудно представить полный образец кода, поскольку значения переменных, которые используются в функции, подлежащей вставке, собираются из ряда других функций. Надеюсь, это еще раз объяснит это. – Flo

ответ

1

, когда вы вставляете ползунок в левую навигационную панель. вставить как этот

//this functionString will contain all your javascript. 
var functionString = '(function() { alert("hi"); })()'; 

$(".left_nav").append("<div id='slider_pricefilter'></div>");//create the slider div in the left nav 
$(".left_nav").append("<script>" + functionString + "</script>");//append the slider event to the slider_pricefilter in the left nav 
+0

В этой строке '$ (". Left_nav "). Append (" ")' Я получаю: 'непредвиденная строковая константа ожидаемая ')' 'при добавлении тега закрытия сценария ... почему ? – Flo

+0

Теперь проверьте с вами функциюString. Я имею в виду, что у вас есть определение функции jquery. Внутренний html элемента сценария должен быть functionString и добавить элемент сценария в .left_nav и добавить div, который является slide_pricefilter, также в .left_nav. –

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