繁体   English   中英

JQuery .on()更改事件未触发(页面在.load()内)

[英]JQuery .on() change event not firing(page is inside a .load())

好的,所以我一直在寻找这个问题的答案几个小时,但没有发现任何有效的方法。

我有一个页面,我在.click事件后加载到div中,所以看起来像这样:

$('#mybutton').click( function () { $('#mydiv').load('myinnerpage.aspx'); });

然后我在myinnerpage.js里面我有:

$(document).on('change', 'input[name=rbfileByNameOrID]:radio', function () {
if ($('input#rbByFileName').attr('checked'))
    fileSelectionBy('filename');
else
    fileSelectionBy('fileid'); 
});

更改函数永远不会被触发,除非我自己打开myinnerpage.aspx。

您可以将myinnerpage.js代码放在主javascript中,而不是放在包含的页面中吗?

如果你不能,我不是“好解决方案”,但这可以帮助你:jQueryMobile-Navigation在用ajax加载页面时遇到了同样的问题,并且他们使用了非jquery解决方案来解决这个问题。 在他们的$ .ajax->成功中,他们使用innerHTML:

[...]

//workaround to allow scripts to execute when included in page divs
all.get( 0 ).innerHTML = html;

[...]

你可以在这里看到他们的完整代码。

它适用于页面div中包含的script-tag 和inline-javascript

尝试手动触发事件?

$('#mybutton').click( function () { 
  $('#mydiv').load('myinnerpage.aspx', function(){
      $('input[name=rbfileByNameOrID]:radio').trigger('change')
   }); 
});
$('input#rbByFileName').trigger('change');

要么:

$('input#rbByFileName').change();

$('#mybutton').click( function () { 
  $('#mydiv').load('myinnerpage.aspx', function(){
      $('input#rbByFileName').change();
  }); 
});

这里的问题是,当.load被运行,内容myinnerpage.aspx被放置(其全部)成#mydiv 任何<script>标签都会运行,但它们将来自当前页面的路径,因此您可能需要检查文件路径。

您可能需要更改脚本以使用绝对路径而不是相对路径,因为../在当前页面和加载的页面上可能不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM