2016-03-21 27 views
0

私は独自のJquery月ピッカーコントロールを作成しました。月のピッカーは<div />の中に座っています。これは、私がそれを呼び出すフィールド<input />に添付する必要があります。明確にするためにJquery append()は閉じタグなしの入力では機能しません

、ここではコードです:あなたは私のコードから気付いたよう

(function ($) { 
    //dict has to be a serialized dictionary. The dictionary needs to have years (as numbers) as keys and for each year a list of numbers representing the months. 
    //Only the provided years/month will be serialized as html. 
    //Sample usage (Razor): 
    //var json = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Periods.ToArray())); 
    //$('#monthPicker').CondatoMonthPicker(json); 
    $.fn.CustomMonthPicker = function (dict) { 
     debugger; 
     //Construct HTML 
     var wrapper = $(this); 

     $monthPickerHeaderHtml = $('some html...'); 
     wrapper.append($monthPickerHeaderHtml); 
     }; 
})(jQuery); 

が、私はMVCかみそりを使用しています。したがって、私は、日付ピッカーを保持するフィールドをインスタンス化するためにこれを使用します。

<input autocomplete="off" class="ms-TextField-field" data-val="true" data-val-date="The field TimePeriod must be a date." data-val-required="The TimePeriod field is required." id="custom-datepicker" name="TimePeriod" type="date"> 

お知らせ欠落終了タグ:

@Html.TextBoxFor(model => model.TimePeriod, new { @id = "custom-datepicker", @type = "date", @class = "ms-TextField-field" })  

しかし、これは、次のHTMLを生成します。それは実際には、あなたが見ることができるように代わりに私のカスタムHTMLを追加すると、

:私は私のラッパー(<div />)オブジェクトに.append()を使用する場合、それは以下の出力に含まHTMLを吐き出す、戻って私のカスタム日付ピッカー機能へ行きますそれを挿入して、末尾に</input>タグを追加して、私の全体の構成が私のページに表示されないようにします。なぜこのことが起こっているのか、どのように対処するのか誰にも分かりません。

EDIT:私は私の表現を十分に明確にしていないと思います。私は<input>フィールドの値を設定したくありません。どういうわけか、jQueryのは、入力要素を取得し、私のhtmlを挿入し、それは本当に最初の終了タグを追加し、それは次のようになりますので、その終了タグの後に私のカスタムHTMLを追加する必要があるときに終了し、その後に終了タグを追加します。

<input ...></input> 
My custom html... 
+1

[ 'input'仕様]を参照してください(https://www.w3.org/TR/html5/forms.html#the-入力要素)。 'input'タグは終了タグを持つことができません(XHTMLを除いて' 'のような短い終了タグであっても技術的に間違っています)。また、要素を 'input'タグ内に埋め込むことはできません(ただし、'

+0

また、問題を示すhttp://jsfiddle.netの動作例を作成してください(私たちが誤解した場合など)。 –

+1

あなたのedit: 'input'要素には、HTMLに終了タグがありません。完全停止。以下は[Chromeの '$ .append()'操作の例です(https://jsfiddle.net/qj07su51/): '

This is to be appended.
'です。 Chromeがそれを表すように終了タグはありません。これが表示されない場合は、その問題を示す最小限の実行可能な例を作成して、詳細に検討できるようにする必要があります。私は、あなたのASP(またはそれが何であれ)コードがそれをやっていると思う。おそらくそれのために適切なタグを質問に追加するべきでしょう。 –

答えて

0

通常、入力には終了タグがなく、代わりにvalue属性が使用されます。 追加するのではなく、入力のval()を変更するとどうなりますか?テキスト領域は、必要な場合には入力領域を開閉するのに適しています。ここ

wrapper.val($monthPickerHeaderHtml); 

は、私が見つけた関連記事です:closing HTML input tag issue

+0

私はあなたが私の質問を誤解したと思う、私は自分の入力htmlフィールドの値を設定したくない、私は後に私のカスタムhtmlを追加したい。何らかの理由でjqueryが挿入するのは、代わりに終了タグを追加し、その終了タグの後ろにHTMLを追加する必要があるときに、終了入力タグを見つけることができないためです。 – LeonidasFett

+0

確かに、私は誤解を犯しましたが、私は空要素を理解することによって質問に答えていると思います。 http://w3c.github.io/html-reference/syntax.html#void-element – TylerT

関連する問題