まず、リモート php フォームをロードするために、bootstrap-modal.js をカスタマイズしました。カスタマイズは次のとおりです (drawjoh に感謝します、https://gist.github.com/1688900 ):
/*
$(function () {
$('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
var $this = $(this), href
, $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
, option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
e.preventDefault()
$target.modal(option)
})
})
*/
$(function () {
$('[data-toggle="modal"]').click(function(e) {
e.preventDefault();
var href = $(this).attr('href');
if (href.indexOf('#') == 0) {
$(href).modal('open');
} else {
$.get(href, function(data) {
$(data).modal();
}).success(function() { $('input:text:visible:first').focus(); });
}
});
})
モーダルは form#email-entry-form で email_ent.php を読み込みます:
<div class="modal fade in" id="contact-container">
<form action="#" id="email-entry-form" style="margin:0">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h3 id="contact-title">Email Entry #{$entry_id}</h3>
</div>
<div class="modal-body">
<textarea class="full focused" id="contact-email" name="email" tabindex="1003" max-length="199" rows="3"></textarea>
<p class="help-block">Use commas to separate email addresses...</p>
<input type="hidden" name="form_id" value="{$form_id}" id="form_id" />
<input type="hidden" name="entry_id" value="{$entry_id}" id="entry_id" />
</div>
<div class="modal-footer">
<button type="reset" data-dismiss="modal" class="btn">Cancel</button>
<a id="contact-send" class="btn btn-primary" tabindex="1004" href="#">Send</a>
</div>
</form>
</div>
これは私が使用するjQuery関数ですが、応答が得られません。
(function($){
$('#contact-send').click(function (e) {
e.preventDefault();
// validate form actions cleaned for clearity.
$.ajax({
url: 'email_ent.php',
data: $('#email-entry-form').serialize() + '&action=send',
type: 'post',
cache: false,
dataType: 'html',
complete: function (xhr) {
/*
more code here...
*/
alert('OK!');
},
error: contact.error
});
});
})(jQuery);
jquery.js とこの関数は、モーダル ウィンドウを起動する view_ent.php から読み込まれますが、クリック機能は動作しません。後でajaxでロードされるモーダルウィンドウ内の要素に到達できないと思います...
このクリック関数内で入力の値を警告しようとしたところ、未定義の応答が返されました。view_ent.php 内の事前定義されたフォーム値を使用して、モーダル ウィンドウごとに非表示のフォームをあきらめてロードしたくありません。
洞察をありがとう。