2011-01-11 64 views
1

Dojo似乎有一个有用的功能,它可以为Dijit.form元素设置事件处理程序和默认选项等,因为它将它插入到DOM中。jQuery UI元素与Dojo(Dijit)表单元素

例如,道场: var slider = new dijit.form.HorizontalSlider({ name: sliderContainerId+'_slider', value: sliderValue, minimum: sliderMax, maximum: sliderMin,
onChange: function(value){ // some event handling logic } }, sliderContainerId);

然而,jQuery UI的滑块传统上被应用到DOM元素已经存在:

$(sliderContainerId).slider({ value:100, min: 0, max: 500, step: 50, slide: function(event, ui) { $("#amount").val("$" + ui.value); } });

我需要能够 '编程' 创建新的滑块(和其他表单元素),但我不确定jQuery的结构如何实现。也许我缺少明显的东西在这里....

MTIA

回答

1

jQuery绝对会让你即时创建新的元素。 $("<div>").appendTo(".wrapper")将创建一个新的div元素并将其添加到id包装器的元素。在一个更大的例子中:

$("<div>").appendTo('.wrapper').slider({ 
    value:100, min: 0, max: 500, step: 50, 
    slide: function(event, ui) { $("#amount").val("$" + ui.value); } 
}); 
2

jQuery有类似的事件注册。

这样做是使用

$('.class').live(eventname, eventhandler); 

插入到共享同一个“类”的DOM任何元素的方式将有其事件自动挂钩。

使用http://www.jqapi.com完整和全面的参考...

0

你说得对,jQueryUI的的小部件上已经在DOM元素存在工作。

我不会相信 jQueryUI具有您所描述的功能。虽然很容易模仿自己。加载新内容后,您只需将slider函数应用于新的HTML。假设你做这个ready和AJAX回调或类似的里面,我将会分离这个初始化代码到它自己的功能,你可以从多个地方拨打:

$(document).ready(function() { 
    initializeSlider("#slider_div"); 
}); 

function initializeSlider(selector) { 
    $(selector).slider({ 
     value:100, 
     min: 0, 
     max: 500, 
     step: 50, 
     slide: function(event, ui) { 
      $("#amount").val("$" + ui.value); 
     } 
    });   
} 

/* later on, when you insert new content, call initializeSlider again */ 

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
     $("body").append(data.content); // append new html to the DOM. 
     initializeSlider("#new_slider_element"); 
    } 
}); 

我从来没有用过道场,但我认为这是你谈论的场景的类型。