我正在使用http://www.jquery-steps.com/中的向导。使用向导的所有内容都非常流畅,但是当我尝试将事件绑定到该向导中的输入字段时,它无法正常工作。以下是该问题的基本代码:
<div class="content">
<h1>Basic Demo</h1>
<div id="wizard">
<h2>First Step</h2>
<section>
<input type="text" class="namer" />
<div class="text">This should be replaced</div>
<h2>Second Step</h2>
<section>
<pdfsgdf</p>
</section>
</div>
</div>
<script>
$(".namer").change(function(e){
$(".text").html($(this).val());
});
$(function ()
{
$("#wizard").steps({
headerTag: "h2",
bodyTag: "section",
transitionEffect: "slideLeft"
});
});
</script>
JSFiddle位于http://jsfiddle.net/m23px/
答案 0 :(得分:6)
看起来加载向导时,它会更改事件监听器。您需要在#wizard
上收听该活动。
试试这个:
$("#wizard").on('change','.namer',function(){
$(".text").html($(this).val());
});
注意:如果您希望在用户输入时进行更改,而不是在字段失去焦点后,您可以改为使用keyup
事件。
$("#wizard").on('keyup','.namer',function(){
$(".text").html($(this).val());
});
答案 1 :(得分:4)
为了澄清这种情况发生的原因 - 在render
函数(第892行)中,使用.empty()
删除了向导的内容,因此绑定到其中元素的所有侦听器都将丢失。 / p>
wizard.attr("role", "application").empty().append(stepsWrapper).append(contentWrapper)
.addClass(options.cssClass + " " + options.clearFixCssClass + verticalCssClass);
因此有三个选项可以解决这个问题,第一个是按Trevor说的做,并将侦听器绑定到向导元素或DOM上面的元素。
第二种是在插件完成加载时添加一个回调,并在此时正常初始化你的监听器。
第三是更改render
函数以使用原始html(因此也就是原始侦听器),如下所示:
function render(wizard, options, state) {
// Create a content wrapper and copy HTML from the intial wizard structure
var contentWrapperTemplate = "<{0} class=\"{1}\"></{0}>",
stepsWrapperTemplate = "<{0} class=\"{1}\">{2}</{0}>",
orientation = getValidEnumValue(stepsOrientation, options.stepsOrientation),
verticalCssClass = (orientation === stepsOrientation.vertical) ? " vertical" : "",
contentWrapper = $(contentWrapperTemplate.format(options.contentContainerTag, "content " + options.clearFixCssClass)),
stepsWrapper = $(stepsWrapperTemplate.format(options.stepsContainerTag, "steps " + options.clearFixCssClass, "<ul role=\"tablist\"></ul>"));
// Transform the wizard wrapper by wrapping the innerHTML in the content wrapper, then prepending the stepsWrapper
wizard.attr("role", "application").wrapInner(contentWrapper).prepend(stepsWrapper)
.addClass(options.cssClass + " " + options.clearFixCssClass + verticalCssClass);
//Now that wizard is tansformed, select the the title and contents elements
var populatedContent = wizard.find('.content'),
stepTitles = populatedContent.children(options.headerTag),
stepContents = populatedContent.children(options.bodyTag);
// Add WIA-ARIA support
stepContents.each(function (index) {
renderBody(wizard, state, $(this), index);
});
stepTitles.each(function (index) {
renderTitle(wizard, options, state, $(this), index);
});
refreshStepNavigation(wizard, options, state);
renderPagination(wizard, options, state);
}
答案 2 :(得分:0)
答案 3 :(得分:0)
要解决此问题,请在页面准备好之前调用其他代码之前的代码,以便在步骤完成其工作时不会丢失绑定